数据结构实验报告解析.doc

实验目的 1.学会如何创建一个单链表 2.如何输出单链表 3.如何连接两个单链表 4..如何删除重复元素 实验内容 将两个递增单链表合并为一个递增单链表,并且 删除重复元素。 设计与编码 本实验用到的理论知识 定义两个指针分别指向两个单链表,比较p- data与q- data的大小,将较小的值放入栈中,输出栈中的元素,将元素存放到aa[n]数组中,然后删除数组中的重复元素,最后将剩余的元素构成一个递增单链表。 算法设计 (1) 单链表的输出 两个单链表连接 将值存放在栈中 输出栈中的元素 运行与测试 1.在调试程序的过程中遇到的问题以及解决方法 问题1:两个单链表都设置了头指针,如何区分 p first- next和q first- next; 解决方法:(破坏了封装性) 问题2:在LinkLIst_main源文件中加入#include“LinkList.cpp”和#include “SeqStack.cpp”会出现如下错误。(注:没有使用模板类) 解决方法: 去掉#include “LinkList.cpp”和#include “SeqStack.cpp”。但是在模板类可以有这两个 并且不会出现错误。 问题三:总是出现如下错误 2.程序的运行的结果 源代码 //LinkList.h #ifndef LinkList_H #define LinkList_H struct Node int data; Node *next; ; class LinkList public: LinkList ; //建立只有头结点的空链表 LinkList int a[],int n ; //建立有n个元素的单链表 ~LinkList ; //析构函数 void PrintList ; //按序号依次输出各元素 void Connect LinkList r,LinkList w ;//连接两个单链表 public: Node *first; //单链表的头指针 ; #endif //LinkList.cpp #include SeqStack.h #include LinkList.h #include using namespace std; LinkList::LinkList first new Node; //生成头结点 first- next NULL; //头结点的指针域置空 LinkList::LinkList int a[],int n //尾插法 Node *r,*s; first new Node; //生成头结点 r first; //尾指针初始化 for int i 0;i n;i++ s new Node; s- data a[i]; //为每个数组元素建立一个结点 r- next s;r s; //将结点s插入到终端结点以后 r- next NULL; //将终端结点的指针域置空 LinkList::~LinkList Node *q NULL; while first! NULL //释放单链表的每一个结点的存储空间 q first; //暂存被释放结点 first first- next; //first指向被释放结点的下一个结点 delete q; void LinkList::PrintList Node *p first- next; //工作指针p初始化 while p! NULL cout p- data ; p p- next; //工作指针p后移 cout endl; void LinkList::Connect LinkList r,LinkList w SeqStack XX; first new Node; Node *p r.first- next; Node *q w.first- next; int s; //储存 while p! NULL q! NULL if p- data q- data s p- data; XX.Push s ; p p- next; else s q- data; XX.Push s ; q q- next; while p NULL q! NULL XX.Push q- data ; q q- next; while q NULL p! NULL XX.Push p- data ; p p- next; XX.Print ; //调用栈中Print 将输出的元素存放到数组中 cout endl; //SeqStack.h #ifndef SeqStack_H #define SeqStack_H const int StackSize

文档评论(0)

1亿VIP精品文档

相关文档