《数据结构》实验指导书
来源: 发布时间:2006-5-29 16:53:37 点击:
 
                   }
                   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;    //前视的类定义

本新闻共5页,当前在第3页  1  2  3  4  5