实验4 群体类和群体大数据 吕恩在.docx
- 文档编号:29706910
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:28
- 大小:69.81KB
实验4 群体类和群体大数据 吕恩在.docx
《实验4 群体类和群体大数据 吕恩在.docx》由会员分享,可在线阅读,更多相关《实验4 群体类和群体大数据 吕恩在.docx(28页珍藏版)》请在冰豆网上搜索。
实验4群体类和群体大数据吕恩在
学校代码:
学号:
《面向对象程序设计》实验报告
(
题目:
群体类和群体数据
学生姓名:
学院:
系别:
专业:
班级:
任课教师:
二〇一五年十二月
群体类和群体数据
一、实验目的
1.了解节点类的声明和实现,学习其使用方法
2.了解链表类的声明和实现,学习其使用方法
3.了解栈类的声明和实现,学习其使用方法
4.了解队列类的声明和实现,学习其使用方法
5.掌握对数组元素排序的方法
6.掌握对数组元素查找的方法
二、实验任务
1.编写程序Node.h实现例9-5的节点类,并编写测试程序lab9_1.cpp,实现链表的基本操作
2.编写程序link.h实现例9-6的链表类,在测试程序lab_2.cpp中声明两个整型链表A和B,分别插入5元素,然后把B中的元素加入A的尾部
3.编写程序queue.h,用链表实现队列(或栈),在测试程序lab9_3.cpp中声明一个整型队列(或栈)对象,插入5个整数,压入队列(或栈),再依次取出并显示出来。
4.(选做)声明course(课程)类,有属性:
课程名charname[21]、成绩shortscore;在实验七的student类中增加属性;所修课程course,为课程类对象的链表。
在测试程序中测试这个类,学生类与课程类关系如图
5.将直接插入排序、直接选择排序、冒泡排序、顺序查找函数封装到第九章的数组类中,作为成员函数,实现并测试这个类
三、实验内容:
1.//9-5.h
#ifndefNODE_CLASS
#defineNODE_CLASS
template
classNode
{
private:
Node
public:
Tdata;//数据域
Node(constT&item,Node
voidInsertAfter(Node
Node
Node
};
template
Node
:
Node(constT&item,Node
data(item),next(ptrnext)
{}
template
Node
:
NextNode(void)const
{
returnnext;
}
template
voidNode
:
InsertAfter(Node
{
p->next=next;//p节点指针域指向当前节点的后继节点
next=p;//当前节点的指针域指向p
}
template
Node
:
DeleteAfter(void)
{
Node
if(next==NULL)//如果当前节点没有后继节点,则返回NULL
returnNULL;
next=tempPtr->next;//使当前节点的指针域指向tempPtr的后继节点
returntempPtr;//返回被删除的节点的地址
}
#endif//NODE_CLASS
//Node.h
#ifndefNODE_LIBRARY
#defineNODE_LIBRARY
#include
#include
#include"9_5.h"
usingnamespacestd;
template
Node
{
Node
newNode=newNode
if(newNode==NULL)//如果分配内存失败,程序中止
{
cerr<<"Memoryallocationfailure!
"< exit (1); } returnnewNode; } enumAppendNewline{noNewline,addNewline}; template voidPrintList(Node { Node while(currPtr! =NULL) { if(addnl==addNewline) cout< else cout< currPtr=currPtr->NextNode(); } } template intFind(Node { Node prevPtr=NULL; while(currPtr! =NULL) { if(currPtr->data==item) return1; prevPtr=currPtr;//记录下当前结点的地址 currPtr=currPtr->NextNode(); } return0;//找不到时 } template voidInsertFront(Node { head=GetNode(item,head); } template voidInsertRear(Node { Node if(currPtr==NULL) InsertFront(head,item); else { while(currPtr->NextNode()! =NULL) currPtr=currPtr->NextNode(); newNode=GetNode(item); currPtr->InsertAfter(newNode); } } template voidDeleteFront(Node { Node if(head! =NULL)//确认链表不空 { head=head->NextNode();//将表头指针head移向第二个结点 deletep;//删除原第一个结点 } } template voidDelete(Node { Node if(currPtr==NULL) return; while(currPtr! =NULL&&currPtr->data! =key) { //currPtr前行,prevPtr跟随其后 prevPtr=currPtr; currPtr=currPtr->NextNode(); } if(currPtr! =NULL) { if(prevPtr==NULL)//找到的是链表第一个结点 head=head->NextNode(); else prevPtr->DeleteAfter(); deletecurrPtr;//释放被删除的结点所占的内存空间 } } template voidInsertOrder(Node { Node prevPtr=NULL; currPtr=head; while(currPtr! =NULL) { if(item break; //currPtr前行,prevPtr跟随其后 prevPtr=currPtr; currPtr=currPtr->NextNode(); } if(prevPtr==NULL)//如果插入点在表头 InsertFront(head,item); else { newNode=GetNode(item); prevPtr->InsertAfter(newNode); } } template voidClearList(Node { Node currPtr=head; while(currPtr! =NULL) { nextPtr=currPtr->NextNode(); deletecurrPtr; currPtr=nextPtr;//使指针currPtr指向下一个结点 } head=NULL;//将头结点置为NULL,标志着链表为空 } #endif//NODE_LIBRARY //lab9_1.cpp #include #include"9_5.h" #include"node.h" usingnamespacestd; intmain() { Node inti,key,item; for(i=0;i<10;i++) { cout<<"pleaseinput"< "< cin>>item; InsertFront(head,item); } cout<<"List: "; PrintList(head,noNewline); cout< cout<<"请输入一个需要删除的整数: "; cin>>key; prevPtr=head; while(Find(head,key,prevPtr)! =NULL) { if(prevPtr==NULL)//找到的是链表第一个结点 head=head->NextNode(); else delPtr=prevPtr->DeleteAfter(); deletedelPtr; } cout<<"List: "; PrintList(head,noNewline); cout< ClearList(head); } 运行结果: pleaseinput1numberToinsertaheader: 1 pleaseinput2numberToinsertaheader: 2 pleaseinput3numberToinsertaheader: 3 pleaseinput4numberToinsertaheader: 4 pleaseinput5numberToinsertaheader: 5 pleaseinput6numberToinsertaheader: 6 pleaseinput7numberToinsertaheader: 7 pleaseinput8numberToinsertaheader: 8 pleaseinput9numberToinsertaheader: 9 pleaseinput10numberToinsertaheader: 10 List: 10987654321 请输入一个需要删除的整数: 2 List: 1098765431 2.//link.h #ifndefLINKEDLIST_CLASS #defineLINKEDLIST_CLASS #include #include usingnamespacestd; #ifndefNULL constintNULL=0; #endif//NULL #include"9_5.h" template classLinkedList { private: Node Node intsize; intposition; Node voidFreeNode(Node voidCopyList(constLinkedList public: LinkedList(void); LinkedList(constLinkedList ~LinkedList(void); LinkedList intListSize(void)const;//返回链表中元素个数(size) intListEmpty(void)const;//size等于0时返回TRUE,否则返回FALSE voidReset(intpos=0); voidNext(void);//使prevPtr和currPtr移动到下一个节点 intEndOfList(void)const; intCurrentPosition(void)const;//返回数据成员position voidInsertFront(constT&item);//在表头插入 voidInsertRear(constT&item);//在表尾添加 voidInsertAt(constT&item);//在当前节点之前插入 voidInsertAfter(constT&item);//在当前节点之后插入 TDeleteFront(void);//删除头节点 voidDeleteAt(void);//删除当前节点 T&Data(void); voidClearList(void); }; template Node : GetNode(constT&item, Node { Node p=newNode if(p==NULL) { cout<<"Memoryallocationfailure! \n"; exit (1); } returnp; } template voidLinkedList : FreeNode(Node { deletep; } template voidLinkedList : CopyList(constLinkedList { Node intpos; while(p! =NULL) { InsertRear(p->data); p=p->NextNode(); } if(position==-1) return; prevPtr=NULL; currPtr=front; for(pos=0;pos! =position;pos++) { prevPtr=currPtr; currPtr=currPtr->NextNode(); } } template LinkedList : LinkedList(void): front(NULL),rear(NULL), prevPtr(NULL),currPtr(NULL),size(0),position(-1) {} template LinkedList : LinkedList(constLinkedList { front=rear=NULL; prevPtr=currPtr=NULL; size=0; position=-1; CopyList(L); } template voidLinkedList : ClearList(void) { Node currPosition=front; while(currPosition! =NULL) { nextPosition=currPosition->NextNode(); FreeNode(currPosition); currPosition=nextPosition;//移动到下一结点 } front=rear=NULL; prevPtr=currPtr=NULL; size=0; position=-1; } template LinkedList : ~LinkedList(void) { ClearList(); } template LinkedList : operator= (constLinkedList { if(this==&L)//不能将链表赋值给它自身 return*this; ClearList(); CopyList(L); return*this; } template intLinkedList : ListSize(void)const { returnsize; } template intLinkedList : ListEmpty(void)const { returnsize==0; } template voidLinkedList : Next(void) { if(currPtr! =NULL) { prevPtr=currPtr; currPtr=currPtr->NextNode(); position++; } } template intLinkedList : EndOfList(void)const { returncurrPtr==NULL; } template intLinkedList : CurrentPosition(void)const { returnposition; } template voidLinkedList : Reset(intpos) { intstartPos; if(front==NULL) return; if(pos<0||pos>size-1) { cerr<<"Reset: Invalidlistposition: "< < return; } if(pos==0) { prevPtr=NULL; currPtr=front; position=0; } else { currPtr=front->NextNode(); prevPtr=front; startPos=1; for(position=startPos;position! =pos;position++) { prevPtr=currPtr; currPtr=currPtr->NextNode(); } } } template T&LinkedList : Data(void) { if(size==0||currPtr==NULL) { cerr<<"Data: invalidreference! "< exit (1); } returncurrPtr->data; } template voidLinkedList : InsertFront(constT&item) { if(front! =NULL) Reset(); InsertAt(item);//在表头插入 } template voidLinkedList : InsertRear(constT&item) { Node prevPtr=rear; newNode=GetNode(item);//创建新结点 if(rear==NULL)//如果表空则插入在表头 front=rear=newNode; else { rear->InsertAfter(newNode); rear=newNode;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验4 群体类和群体大数据 吕恩在 实验 群体 数据