1、群体类和群体数据 面向对象得程序设计实验报告(题 目:群体类与群体数据学生姓名: 学 院:理学院系 别:数学系专 业:信息与计算科学班 级:任课教师: 二一一年 十 一月1、实验目得1、了解节点类得声明与实现,学习其使用方法2、了解链表类得声明与实现,学习其使用方法3、了解栈类得声明与实现,学习其使用方法4、了解队列类得声明与实现,学习其使用方法5、掌握对数组元素排序得方法6、掌握对数组元素查找得方法2、实验内容1.、编写程序Node、h实现例9-5得节点类,并编写测试程序ab9_1、cpp,实现链表得基本操作、编写程序l、h实现例96得链表类,在测试程序lab2、cp中声明两个整型链表A与B
2、,分别插入5元素,然后把中得元素加入A得尾部3、编写程序quee.h,用链表实现队列(或栈),在测试程序lab_3.c中声明一个整型队列(或栈)对象,插入5个整数,压入队列(或栈),再依次取出并显示出来、4、将直接插入排序、直接选择排序、冒泡排序、顺序查找函数封装到第九章得数组类中,作为成员函数,实现并测试这个类。3、实验程序及结果1.程序一/9_5。#ifndef NDE_LSS#deinNODCLASS/类定义部分templatcass class oe ivate: NodeT*next; /指向后继节点得指针 public: T daa; /数据域 / 构造函数 ode(cnst T
3、, NodeT ptnext = NLL); / 在本节点之后插入一个同类节点 voidnsertAfter(dT *p); / 删除本节点得后继节点,并返回其地址 NodeT eeeAter(voi); / 获取后继节点得地址 Nde:oe(cons T item,NooT N:NxNoe(voi) onst retun next; / 在当前节点之后插入一个节点p tepate:nsrtAfter(NdeT *p) pnx = net; /p节点指针域指向当前节点得后继节点 ext = p; /当前节点得指针域指向p / 删除当前节点得后继节点,并返回其地址tmlate odeT *NT:
4、DlteAfter(oid)NodT temPtr = next; /将欲删除得节点地址存储到tempPt中 i (net = L) /如果当前节点没有后继节点,则返回NULL rurNUL; ext = temPt-t; /使当前节点得指针域指向temptr得后继节点 retur empPt; 返回被删除得节点得地址#endif/ NODE_CA/Nde.h#ifndef NDE_LIRARY#dfine O_LBRARY#includostrem#incde csdlbinclude9、usg namesace std;/ 生成结点:创建一个结点,数据成员值为it,指向后继结点得指针值为n
5、exPtrtemplate NodeT *GetNod(const T, NeT *nextPt =NULL) oe *ewNode; / 为新结点分配内存空间,然后将itm与NxPtr传递给构造函数 newde =w NodeT(itm,nextPtr); if (ewNde= ULL) /如果分配内存失败,程序中止 cer ”Meoy locaion ire! cuP = hed; / 输出结点数据,直到链表结束 hie(currt != NLL) / 如果换行标志dd=addNwline,则输出换行符 if(addnl = addNwe) out data en; ele ct curP
6、trt ; /使crrP指向下一个结点 curPtr = curPtr-Nextd(); /查找结点/在指针had所指向得链表中查找数据域等于it得结点/找到则返回TRUE及其前趋结点得地址,否则返回ALSEteplitFin(NodT hed,&ite, odeT prPtr)Neoid InsertFont(NodeT* had, T item) 建立新结点,使其指针域指向原链表头结点head,然后更新ed hea = GeNoe(im,hea);/在表尾添加结点tmpte Insertter(neNode); / 删除链表得第一个结点templatvod eleteront(NodeT*
7、 & ed) NodeTp =hed; /取得将被删除得结点得地址 if (hea != NUL) / 确认链表不空 head= he-etod(); / 将表头指针hd移向第二个结点 dleep; 删除原第一个结点 / 删除链表中第一个数据域等于ey得结点teplte &had,T key) /crPtr用于遍历链表,pret跟随其后 Nodedata != ey) / crrPtr前行,prePtr跟随其后 prevPtr= crrt; curPtr =urrPrNxtoe(); /若 urrPtr != NULL,则currPt指向得结点数据域为y if(curPtr ! NU) f(p
8、evtr = L) /找到得就是链表第一个结点 ead = head-NextNde(); else 如果找到得就是第二个以后得结点,调用前趋结点得成员函数删除之 ptr-elteAftr(); dlee urPtr; 释放被删除得结点所占得内存空间 / 在有序链表中插入一个结点teplat cass Tvoid Inserrde(NodeT*& hea, T item) / curPt用于遍历链表,pevPtr跟随其后 Nded) rea; / crrPr前行,revPtr跟随其后 prevPtr = currtr; urPr =currrNetNoe(); / 完成插入 if (prevP
9、tr =NLL) /如果插入点在表头 InsertFront(had,iem); ele /在prevPtr指向得结点之后插入新结点 nwNoe = GetNode(iem); prePtInetAfte(nwe); /清空链表删除链表中得所有结点emlate class Toid CerLst(NodeT * head) Nd *currPr,*nxPtr; /边遍历边删除结点 rrPtr head; whe(currPt != NULL) / 记录下一个结点得地址,删除当前结点 etPr = curPr-NtNod(); delete currr; urPtr nextPtr; /使指针u
10、rrPtr指向下一个结点 hea NULL; /将头结点置为NLL,标志着链表为空edf / NODELIBRY/la9。p#inclde otre#incde95。h#inlud od、huing amespace std;it main() / 将表头指针置为UL eite; Insertnt(ed, item); /输出链表 cot Li:; PintLst(head,oNewlne); out endl; / 输入需要删除得整数 cout e; / 查找并删除结点 prevr head; while (Fnd(hed,key,prevPt)!= NULL) f(pevt= NULL)
11、/找到得就是链表第一个结点 ead= head-Nextoe(); else / 如果找到得就是第二个以后得结点,调用前趋结点得成员函数删除之 eltr=prevPteltefe(); elete deltr; / 输出链表 ou is: ; PrintList(he,oNwine); cout endl; /清空链表 laList(hed);实验结果如下:2程序二/a9_2.cppincludlink、hit mai() Linkeistint A, ; fo(int i=0;i5;+) A.Inerta(i1); B.nsetRr(2*i+2); A、Ree();cou 链表A得元素为:”
12、;while(!、ndOfList() cout A、Data() ” ; .xt(); cou endl; B。Reet();ot ”链表B得元素为:;while(!B。nOfLst() cout 。ata() ” ;B、Nxt(); cou e; cou 把B中得元素插入A中、” edl;、ese(); wile(!B。EOfList() A、nerRer(B、Data();B.ex(); A。ese();out 此时,链表A得元素为:” ; whie(!A、EdOfi() cut、at() ”; A。Nxt(); outendl;lik、ifnef INKEDLITCLSSdefieIN
13、EDISTCLASicl *fro, rer; /记录表当前遍历位置得指针,由插入与删除操作更新 NoeT prevt, *urPr; / 表中得元素个数 nt sz; / 当前元素在表中得位置序号。由函数Ree使用 intsitin; /函数成员: / 生成新节点,数据域为item,指针域为prNext NodTtNod(cost T iem,Node *pex=UL); /释放节点 oi FreNoe(Ndep); /将链表L拷贝到当前表(假设当前表为空)。 / 被拷贝构造函数、eraor=调用 voi opyLis(cns Likdist ); pubi: 构造函数 LikedList(
14、void); inkedList(const LindLis L); /拷贝构造函数 / 析构函数 Lines(void); /重载赋值运算符 LinkdLisT& oerator= (consLnkedLst L); / 检查表得状态 nt LisSize(void) ns; /返回链表中元素个数(sie) nt isEmty(vi) cost; /size等于0时返回TRUE,否则返回ASE / 遍历表得函数 void Rst( os = 0); /将指针urrPr移动到序号为os得节点,prevPr相应移动 / positi记录当前节点得序号 voi Next(oi); /使pevPt与
15、urrPt移动到下一个节点 nt EnOLis(vod) cnst; /urrPtr等于NUL时返回TRUE,否则返回FALE int CuntPoition(voi) ont; /返回数据成员poition 插入节点得函数:插入一个数据域为te得节点 vod InsertFrot(nst T item); /在表头插入 voi Insertar(ns& iem); /在表尾添加 voidInsertt(cnst& ite); /在当前节点之前插入 void Inertter(ons item); /在当前节点之后插入 / 删除节点,释放节点空间,更新pvPtr、currPr与size T D
16、eleFrn(voi); /删除头节点 vo eteAt(voi); /删除当前节点 / 返回对当前节点成员data得引用(使数据域可以被使用或修改) Data(o); / 清空链表:释放所有节点得内存空间。被析构函数、oratr= 调用 vodlrList(void);templas TodeT *LindList:GetNod(consT item, NodeT* Nex) NodeT p; p = eode(im,ptet); if (p = NU) cout p) delte p;/将L复制到当前链表empte classTvoid Lnedist:opyList(onstinkedL
17、istT) /用来遍历L NodeT* L、frot; int pos; /将中得每一个元素插入到当前链表最后 whle (p != UL) Inserter(-aa); p NexNode(); /如果链表空,返回 i(ositon= 1) etur; /在新链表中重新设置prvPtr与currPr prer = NULL; curPtr = fr; or (pos = 0; po != psitio; ps) vt crrPtr; urrPt = PtNxtNode(); /建立一个新链表,即:将有关指针设置为空,size为0,otn为-1eplt :Linked(void):frot(ULL), ear(NL), pvPr(N),currPr(NULL),ize(0), positin(-1)templae class LinedLst:Likedist(const LinedListT L) ront = rar = L; prevPtr currPt=NULL; sie= 0; positin=1; Cpyist(L);tmplate ls Tid
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1