《群体类和群体数据》由会员分享,可在线阅读,更多相关《群体类和群体数据(22页珍藏版)》请在金锄头文库上搜索。
1、资料范本本资料为word版本,可以直接编辑和打印,感谢您的下载群体类和群体数据地点:时间:说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与 义务,仅供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时 请详细阅读内容学校代码:10128学 号:面向对象的程序设计实验报告(题 目:群体类和群体数据学生姓名:学 院:理学院系别:数学系专业:信息与计算科学班级:任课教师:二0年十月实验目的了解节点类的声明和实现,学习其使用方法了解链表类的声明和实现,学习其使用方法了解栈类的声明和实现,学习其使用方法了解队列类的声明和实现,学习其使用方法掌握对数组元素排序的方法掌握对数组元
2、素查找的方法实验内容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、将直接插入排序、直接选择排序、冒泡排序、顺序查找函数封装到第九 章的数组类中,作为成员函数,实现并测试这个类。实验程序及结果程序一/9_5.h#ifnd
3、ef NODE_CLASS#define NODE_CLASS类定义部分template class Node(private:Node *next; /指向后继节点的指针public:T data; /数据域/构造函数Node (const T& item, Node* ptrnext = NULL);/在本节点之后插入一个同类节点pvoid InsertAfter(Node *p);/删除本节点的后继节点,并返回其地址Node *DeleteAfter(void);/获取后继节点的地址Node *NextNode(void) const;;/类的实现部分/构造函数,初始化数据和指针成员te
4、mplate Node:Node(const T& item, Node* ptrnext):data(item), next(ptrnext)(/返回私有的指针成员template Node *Node:NextNode(void) const(return next;/在当前节点之后插入一个节点ptemplate void Node:InsertAfter(Node *p)(p-next = next;/p节点指针域指向当前节点的后继节点next = p;当前节点的指针域指向p/删除当前节点的后继节点,并返回其地址template Node *Node:DeleteAfter(void)N
5、ode *tempPtr = next; /将欲删除的节点地址存储到tempPtr中if (next = NULL) /如果当前节点没有后继节点,则返回NULLreturn 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;/生成结点:创建一个结点,数据成员值为
6、item,指向后继结点的指针 值为 nextPtrtemplate Node *GetNode(const T& item, Node *nextPtr = NULL)(Node *newNode;/为新结点分配内存空间,然后将item和NextPtr传递给构造函数newNode = new Node(item, nextPtr);if (newNode = NULL) 如果分配内存失败,程序中止(cerr Memory allocation failure! endl;return newNode;enum AppendNewline noNewline,addNewline;/输出链表te
7、mplate void PrintList(Node *head, AppendNewline addnl = noNewline)(/ currPtr初始指向表头结点,用于遍历链表Node *currPtr = head;/输出结点数据,直到链表结束while(currPtr != NULL)(/如果换行标志addl = addNewline,则输出换行符if(addnl = addNewline)cout data endl;elsecout data NextNode();查找结点/在指针head所指向的链表中查找数据域等于item的结点找到则返回TRUE及其前趋结点的地址,否则返回FA
8、LSEtemplate int Find(Node *head, T& item, Node* &prevPtr)(Node *currPtr = head;/从第一个结点开始遍历prevPtr = NULL;/通过循环遍历链表,直到表尾while(currPtr != NULL)(将item与结点的数据域比较,如果相等,则返回,否则继续处理下一个 结点if (currPtr-data = item)return 1;prevPtr = currPtr;/记录下当前结点的地址currPtr = currPtr-NextNode();return 0; /找不到时在表头插入结点template
9、void InsertFront(Node* & head, T item)(/建立新结点,使其指针域指向原链表头结点head,然后更新headhead = GetNode(item,head);在表尾添加结点template void InsertRear(Node* & head, const T& item)(Node *newNode, *currPtr = head;/如果链表为空,则插入在表头if (currPtr = NULL)InsertFront(head,item);else(/寻找指针域为NULL的结点while(currPtr-NextNode() != NULL)cu
10、rrPtr = currPtr-NextNode();/建立新结点并插入在表尾(在currPtr之后)newNode = GetNode(item);currPtr-InsertAfter(newNode);/删除链表的第一个结点template void DeleteFront(Node* & head)(Node *p = head;/取得将被删除的结点的地址if (head != NULL) /确认链表不空head = head-NextNode(); /将表头指针head移向第二个结点delete p;删除原第一个结点/删除链表中第一个数据域等于key的结点template void
11、Delete (Node* & head, T key)(/ currPtr用于遍历链表,prevPtr跟随其后Node *currPtr = head, *prevPtr = NULL;/如果链表为空,则返回if (currPtr = NULL)return;通过循环遍历链表,直到找到数据域为key的结点,或达到表尾while (currPtr != NULL & currPtr-data != key)(/ currPtr前行,prevPtr跟随其后prevPtr = currPtr;currPtr = currPtr-NextNode();若currPtr != NULL,则currPt
12、r指向的结点数据域为keyif (currPtr != NULL)(if(prevPtr = NULL) /找到的是链表第一个结点head = head-NextNode();else/如果找到的是第二个以后的结点,调用前趋结点的成员函数删除之prevPtr-DeleteAfter();delete currPtr;/释放被删除的结点所占的内存空间/在有序链表中插入一个结点template void InsertOrder(Node* & head, T item)(/ currPtr用于遍历链表,prevPtr跟随其后Node *currPtr, *prevPtr, *newNode;/ p
13、revPtr = NULL标志着应插入在表头prevPtr = NULL;currPtr = head;/通过循环遍历链表,寻找插入点while (currPtr != NULL)(/如果item 当前结点数据,则插入点应在当前结点之前if (item data)break;/ currPtr前行,prevPtr跟随其后prevPtr = currPtr;currPtr = currPtr-NextNode();/完成插入if (prevPtr = NULL) /如果插入点在表头InsertFront(head,item);else(/在prevPtr指向的结点之后插入新结点newNode = GetNode(item);prevPtr-InsertAfter(newNode);清空链表一删除链表中的所有结点template void ClearList(Node * &head)(Node *currPtr, *nextPtr;/边遍历边删除结点currPtr = head;while