- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验目的
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)