} pa = pa -> next; pb = pb -> next; } } if (pc == NULL) la.head -> next = pc; else pc -> next = NULL; la.show(); ////在屏幕上显示单链表lb中的数据元素 }
void main(void) { exercise1(); //执行实验一的操作 cout<<endl<<endl<<endl; exercise2(); //执行实验二的操作 } //node.h //单链表的数据结构和操作的实现的头文件 #include <iostream.h> //包含输入输出头文件 class node //定义结点类类型 { // data element 数据单元 public: int data; //整型数据元素 node* next; //指向下一个结点的指针类型 // constructor public: node(int x); //结点操作 // method public: void show(void); //显示函数 };
class list //单链表数据类型类的实现 { public: node* head; //头结点指针 public: list(); //缺省建表操作 list(int* data,int length); //用户定义建表操作 public: void show(void); //显示函数 }; node::node(int x) //结点类中的结点操作的实现 { data = x; next = NULL; }
void node::show(void) //结点类中的显示函数的实现 { cout<<data; if (next != NULL) cout<<" --> "; }
list::list() //缺省单链表类的建表操作的实现 { head = new node(0); }
list::list(int* data, int length) //用户定义的单链表类的建表操作的实现 { head = new node(0); head -> data = length; node* temp; temp = head; for (int i = 0; i < length; i ++) { temp -> next = new node(data[i]); temp = temp -> next; // temp -> next = NULL; } }
void list::show(void) //单链表类中的显示函数的实现 { node* temp; temp = head -> next; while (temp != NULL) { temp -> show(); temp = temp -> next; } cout<<endl<<endl; } 上述函数全部在Borland C++ 3.1中编译执行通过,执行结构如下: 0-->2-->4-->6-->8-->10-->12-->14-->16-->18 0-->3-->6-->9-->12-->15-->18-->21-->24-->27 27-->24-->21-->18-->18-->16-->15-->14-->12-->12-->10-->9-->8-->6-->6-->4-->3-->2-->0-->0
1-->3-->5-->7-->9-->11-->13-->15-->17-->19 0-->3-->6-->9-->12-->15-->18-->21-->24-->27 3-->9-->15 具体执行时,由于屏幕显示的问题,所以实际的现实结果可能在屏幕上的位置同上面的结果有所差异,请学员不要以为时程序的错误,这是正常的。 实验二:设ha和hb分别是两个带表头结点的非递减有序单链表的表头指针, 试设计一个算法, 将这两个有序链表合并成一个非递增有序的单链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。 本实验采用C++作为编程语言,目的是为了让学员更好地将数据结构的学习和C++的学习结合起来,要求学员实现熟悉C++语言,尤其是其中的模板类的实现。同时,学员应当很好地掌握数据结构中单链表抽象数据类型的实现,了解单链表的建表、查找,删除和插入等算法的实现。下面给出单链表的类实现: 单链表的结点类(ListNode class)和链表类(List class)的类定义。 template <class Type> class List; //前视的类定义 |