线性表的基本操作及其应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线性表的基本操作及其应用
一、实验目的
1、帮助学生复习C++语言程序设计中的知识。

2、熟悉线性表的逻辑结构。

3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。

二、实验内容
单链表的基本操作
[问题描述]
实现带头结点的单链表的建立、求长度,取元素、修改元素、插
入、删除等单链表的基本操作。

[基本要求]
(1)依次从键盘读入数据,建立带头结点的单链表;
(2)输出单链表中的数据元素
(3)求单链表的长度;
(4)根据指定条件能够取元素和修改元素;
(5)实现在指定位置插入和删除元素的功能。

三、概要设计
各操作的具体函数实现:
1.用尾插法建立带头结点的链表
可任意输入元素(char 型),
void CreatList(LinkList &L)
{
//LinkList p;
L=(LinkList)malloc(sizeof(LNode));
int n=0,j=0;
L->next=NULL;
cout<<"请输入结点个数:";
cin>>n;
for(int i=n;i>0;i--)
{
LinkList p;
p=(LinkList)malloc(sizeof(LNode));
cout<<"请输入一个节点数据:"<<endl;
cin>>p->data;
p->next=L->next;
L->next=p;
Length++;//每增加一个数据,Length加一
}
}
2.清空链表
分析链表为空时,输出为空;当链表不为空时,清空链表,并输出原来的链表已经被清空!的字样告诉操作者,链表已为空了
int ClearList(LinkList &L)
{
if(L->next==NULL)
{
cout<<"链表为空!";
}
else {
{
LinkList p,q;
p=L->next;
while(p)
{
q=p;
p=p->next;
-- Length;
delete q;
}
}
cout<<"原来的链表已经被清空!!"<<endl;
}
return OK;
}
3.求链表的长度
在建立链表是已经用Length着个全局变量记载建立的结点的个数,即链表的长度用cout<<Length就可以得到链表的长度:
int Listlength(LinkList L)
{
cout<<"链表长度为:"<<Length<<endl;
return Length;
}
4.链表元素的展示
用函数DisplayList(LinkList L)实现,首先判断链表是否为空,当链表不为空时,在从第一个元素找到并输出,主要步骤为:
LinkList p;
p=L->next;
cout<<"链表中的数据依次为:"<<'\t';
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
5.从链表中查找元素
用函数GetElem_L(LinkList L)来实现该功能。

先输入要查找的元素的位置,再判断是否在有效区间里,如果是的话,就用字母e返回并输出,主要步骤为:
if(i>Length)
{
cout<<"想要得到的元素的位置超过链表的长度"<<endl;;
return ERROR;
}
else if(L==NULL)
{
cout<<"链表为空"<<endl;;
return ERROR;
}
else
{
LinkList p;
p=L->next;int j=1;
while(p&&j<i)
{p=p->next;++j;}
if(!p)
cout<<"第i个元素不存在";
e=p->data;
cout<< e<<" "<<endl;
return p->data;
6.向链表中插入元素
这个功能是通过函数ListInsert_L(LinkList &L)实现的。

首先要判断要插入的位置i是否在有效的区间里,如果是的话,接下来要找到第i-1的位置,然后是指针的一些操作,最主要的步骤是:
cout<<"想要插入的元素:"<<endl;
cin>>e;
LinkList p,s;
p=L;
while(j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1)cout<<"要插入的第i个元素不存在";
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
Length++;
cout<<"插入成功!";
7.从链表中删除元素
这个功能在某种程度上与插入元素的步骤有点相似,也是先判断链表是否为空接下来是判断要删除的元素的位置i是否在有效地区间里,是的或在执行删除的功能。

主要步骤如下:
LinkList p,q;
p=L;
while(p&&j<i-1)
{p=p->next;++j;}
if(!p||j>i-1)
cout<<"要删除的第i个元素不存在";
q=p->next;
p->next=q->next;
e=q->data;
free(q);
Length--;
cout<<e<<" "<<"删除元素成功!";
8.最后一个功能函数是:改变元素!
这个函数与查找元素的函数有点相似,先找到你要修改元素位置在输入你想要改变后的元素,输入用e返回。

主要步骤为:
LinkList p;
p=L->next;int j=1;
while(p&&j<i)
{p=p->next;++j;}
if(!p||j>i)
cout<<"要改变的第i个元素不存在";
cout<<"改变后的元素";
cin>>e;
p->data=e;
在函数结尾又添加了一个菜单函数,便于各种函数的操作:;
void menu()
{
cout<<"******我的链表******"<<endl;
cout<<"1.初始化并创建链表!"<<endl;
cout<<"2.清空链表!"<<endl;
cout<<"3.求链表长度!"<<endl;
cout<<"4.遍历链表并输出每个节点的数据!"<<endl;
cout<<"5.从链表中查找元素!"<<endl;
cout<<"6.向链表中插入元素!"<<endl;
cout<<"7. 从链表中删除元素!"<<endl;
cout<<"8. 改变元素!"<<endl;
cout<<"9.其他键退出!"<<endl;
}
四、主函数的调用过程及测试结果
构造空链表Linklist L →为空链表分配空间并输入数据,调用Creatlist_L(L)函数→求链表长度,调用length(L)函数
测试如下:A B C D并将第二个元素修改为K然后显示该链表:。

相关文档
最新文档