实验4-群体类和群体数据---吕恩在(共15页).doc
《实验4-群体类和群体数据---吕恩在(共15页).doc》由会员分享,可在线阅读,更多相关《实验4-群体类和群体数据---吕恩在(共15页).doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上学校代码: 学 号: 面向对象程序设计实验报告(题 目:群体类和群体数据学生姓名:学 院:系 别:专 业:班 级:任课教师: 二一五年十二月群体类和群体数据一、 实验目的1. 了解节点类的声明和实现,学习其使用方法2. 了解链表类的声明和实现,学习其使用方法3. 了解栈类的声明和实现,学习其使用方法4. 了解队列类的声明和实现,学习其使用方法5. 掌握对数组元素排序的方法6. 掌握对数组元素查找的方法二、实验任务1.编写程序Node.h实现例9-5的节点类,并编写测试程序lab9_1.cpp,实现链表的基本操作2.编写程序link.h实现例9-6的链表类,在测试程序l
2、ab_2.cpp中声明两个整型链表A和B,分别插入5元素,然后把B中的元素加入A的尾部3.编写程序queue.h,用链表实现队列(或栈),在测试程序lab9_3.cpp中声明一个整型队列(或栈)对象,插入5个整数,压入队列(或栈),再依次取出并显示出来。4.(选做)声明course(课程)类,有属性:课程名char name21、成绩short score;在实验七的student类中增加属性;所修课程course,为课程类对象的链表。在测试程序中测试这个类,学生类与课程类关系如图5. 将直接插入排序、直接选择排序、冒泡排序、顺序查找函数封装到第九章的数组类中,作为成员函数,实现并测试这个类三
3、、实验内容:1. /9-5.h#ifndef NODE_CLASS#define NODE_CLASStemplate class Node private: Node *next; /指向后继节点的指针 public: T data; /数据域 Node (const T& item, Node* ptrnext = NULL); void InsertAfter(Node *p); Node *DeleteAfter(void); Node *NextNode(void) const;template Node:Node(const T& item, Node* ptrnext) : da
4、ta(item), next(ptrnext) template Node *Node:NextNode(void) const return next;template void Node:InsertAfter(Node *p) p-next = next; /p节点指针域指向当前节点的后继节点 next = p; /当前节点的指针域指向ptemplate Node *Node:DeleteAfter(void)Node *tempPtr = next; /将欲删除的节点地址存储到tempPtr中 if (next = NULL) /如果当前节点没有后继节点,则返回NULL return
5、NULL; next = tempPtr-next; /使当前节点的指针域指向tempPtr的后继节点 return tempPtr; /返回被删除的节点的地址#endif / NODE_CLASS/Node.h#ifndef NODE_LIBRARY#define NODE_LIBRARY#include #include #include 9_5.husing namespace std;template Node *GetNode(const T& item, Node *nextPtr = NULL) Node *newNode; newNode = new Node(item, ne
6、xtPtr); if (newNode = NULL) /如果分配内存失败,程序中止 cerr Memory allocation failure! endl; exit(1); return newNode;enum AppendNewline noNewline,addNewline;template void PrintList(Node *head, AppendNewline addnl = noNewline) Node *currPtr = head; while(currPtr != NULL) if(addnl = addNewline) cout data endl; el
7、se cout data NextNode(); template int Find(Node *head, T& item, Node* &prevPtr) Node *currPtr = head; /从第一个结点开始遍历 prevPtr = NULL; while(currPtr != NULL) if (currPtr-data = item) return 1; prevPtr = currPtr; /记录下当前结点的地址 currPtr = currPtr-NextNode(); return 0; /找不到时template void InsertFront(Node* & he
8、ad, T item) head = GetNode(item,head);template void InsertRear(Node* & head, const T& item) Node *newNode, *currPtr = head; if (currPtr = NULL) InsertFront(head,item); else while(currPtr-NextNode() != NULL) currPtr = currPtr-NextNode(); newNode = GetNode(item); currPtr-InsertAfter(newNode); template
9、 void DeleteFront(Node* & head) Node *p = head; /取得将被删除的结点的地址 if (head != NULL) / 确认链表不空 head = head-NextNode(); / 将表头指针head移向第二个结点 delete p; /删除原第一个结点 template void Delete (Node* & head, T key) Node *currPtr = head, *prevPtr = NULL; if (currPtr = NULL) return; while (currPtr != NULL & currPtr-data
10、!= key) / currPtr前行,prevPtr跟随其后 prevPtr = currPtr; currPtr = currPtr-NextNode(); if (currPtr != NULL) if(prevPtr = NULL) /找到的是链表第一个结点 head = head-NextNode(); else prevPtr-DeleteAfter(); delete currPtr; /释放被删除的结点所占的内存空间 template void InsertOrder(Node* & head, T item) Node *currPtr, *prevPtr, *newNode
11、; prevPtr = NULL; currPtr = head; while (currPtr != NULL) if (item data) break; / currPtr前行,prevPtr跟随其后 prevPtr = currPtr; currPtr = currPtr-NextNode(); if (prevPtr = NULL) /如果插入点在表头 InsertFront(head,item); else newNode = GetNode(item); prevPtr-InsertAfter(newNode); template void ClearList(Node * &h
12、ead) Node *currPtr, *nextPtr; currPtr = head; while(currPtr != NULL) nextPtr = currPtr-NextNode(); delete currPtr; currPtr = nextPtr; /使指针currPtr指向下一个结点 head = NULL; /将头结点置为NULL,标志着链表为空#endif / NODE_LIBRARY/lab9_1.cpp#include #include 9_5.h#include node.husing namespace std;int main() Node *head = N
13、ULL, *prevPtr, *delPtr; int i, key, item; for (i=0;i 10;i+) coutplease input i+1 number To insert a header :item; InsertFront(head, item); cout List: ; PrintList(head,noNewline); cout endl; cout key; prevPtr = head; while (Find(head,key,prevPtr) != NULL) if(prevPtr = NULL) /找到的是链表第一个结点 head = head-N
14、extNode(); else delPtr=prevPtr-DeleteAfter(); delete delPtr; cout List: ; PrintList(head,noNewline); cout endl; ClearList(head);运行结果:please input 1 number To insert a header :1please input 2 number To insert a header :2please input 3 number To insert a header :3please input 4 number To insert a head
15、er :4please input 5 number To insert a header :5please input 6 number To insert a header :6please input 7 number To insert a header :7please input 8 number To insert a header : 8please input 9 number To insert a header :9please input 10 number To insert a header :10List: 10 9 8 7 6 5 4 3 2 1请输入一个需要删
16、除的整数: 2List: 10 9 8 7 6 5 4 3 12. /link.h#ifndef LINKEDLIST_CLASS#define LINKEDLIST_CLASS#include #include using namespace std;#ifndef NULLconst int NULL = 0;#endif / NULL#include 9_5.htemplate class LinkedList private: Node *front, *rear; Node *prevPtr, *currPtr; int size; int position; Node *GetNo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 群体 数据 15
限制150内