数据结构实验说课.docVIP

  • 9
  • 0
  • 约3.89千字
  • 约 10页
  • 2016-10-24 发布于湖北
  • 举报
实验目的 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 iostream 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;in;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) { coutp-data ; p=p-next; //工作指针p后移 } coutendl; } void LinkList::Connect(LinkList r,LinkList w) { SeqStack XX; first=new Node; Node *p=r.first-nex

文档评论(0)

1亿VIP精品文档

相关文档