验证2线性表子系统实验报告.docx
- 文档编号:7225761
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:11
- 大小:297.93KB
验证2线性表子系统实验报告.docx
《验证2线性表子系统实验报告.docx》由会员分享,可在线阅读,更多相关《验证2线性表子系统实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
验证2线性表子系统实验报告
1、实验容或题目
(1)用结构体描述一个字符型的单向链表。
(2)创建线性表;在线性表中插入元素、删除元素;显示线性表中所有元素的基本操作。
(3)用if语句设计一个选择式菜单。
线性表子系统
****************************************************
*1--------建表*
*2--------插入*
*3--------删除*
*4--------显示*
*5--------查找*
*6--------求表长*
*0--------返回*
****************************************************
2、实验目的与要求
(1)掌握线性表的特点;
(2)掌握线性表顺序存储结构和链式存储结构的基本运算;
(3)掌握线性表的创建,插入,删除和显示线性表中元素的基本操作。
3、实验步骤与源程序
实验步骤
首先构建出各个函数在主调函数main()函数中的作用以及返回值:
CreatList()函数是用来建立线性表,InsList()函数用来插入结点元素,DelList()函数用来删除结点元素,ShowList()函数用来显示线性表,SearchList()函数用来查找线性表元素,主函数main()用于菜单界面,方便操作。
之后便是具体实现每个函数功能的细节。
程序编好后经过不断地差错改错,最后得到正确的源程序。
程序源代码
#include
#include
typedefstructlinknode
{
chardata;
structlinknode*next;
}linnode;
linnode*head;
intn;
voidCreateList()
{
linnode*p,*s;
intz;
charx;
n=0;
z=1;
head=(linnode*)malloc(sizeof(linnode));
p=head;
printf("\n\t\t请逐个输入节点,以‘x’为结束标记!
\n");
printf("\n");
while(z)
{
printf("\t\t输入一个字符数据,并按回车:
");
scanf("%c",&x);
getchar();
if(x!
='x')
{
s=(linnode*)malloc(sizeof(linnode));
n++;
s->data=x;
p->next=s;
s->next=NULL;
p=s;
}
elsez=0;
}
}
voidInsList(inti,charx)
{
linnode*s,*p;
intj;
p=head;
j=10;
while(p!
=NULL&&j
{
j++;
p=p->next;
}
if(p!
=NULL)
{
s=(linnode*)malloc(sizeof(linnode));
s->data=x;
s->next=p->next;
p->next=s;
n++;
}
elseprintf("\n\t\t线性表为空或插入位置超出!
\n");
}
voidDelList(charx)
{
linnode*p,*q;
if(head==NULL)
{
printf("\n\t\t链表下溢!
");
return;
}
if(head->next==NULL)
{
printf("\n\t\t线性表已为空!
");
return;
}
q=head;
p=head->next;
while(p!
=NULL&&p->data!
=x)
{
q=p;
p=p->next;
}
if(p!
=NULL)
{
q->next=p->next;
free(p);
n--;
printf("\n\t\t结点%c已经被删除!
",x);
}
elseprintf("\n\t\t抱歉!
没有找到您要删除的结点。
");
}
voidShowList()
{
linnode*p=head;
printf("\n\t\t显示线性表的所有元素:
");
if(head->next==NULL||p==NULL)
printf("\n\t\t链表为空!
");
else
{
printf("\n\t\t");
while(p->next!
=NULL)
{
printf("%5c",p->next->data);
p=p->next;
}
}
}
voidSearchList(charx)
{
linnode*p;
inti=1;
if(head==NULL)
{
printf("\n\t\t链表下溢!
");
return;
}
if(head->next==NULL)
{
printf("\n\t\t线性表为空,没有任何节点!
");
return;
}
p=head->next;
while(p!
=NULL&&p->data!
=x)
{
p=p->next;
i++;
}
if(p!
=NULL)
printf("\n\t\t在表的第%d位上找到值为%c的结点!
",i,x);
else
printf("\n\t\t抱歉!
未找到值为%c的结点!
",x);
}
voidmain()
{
intchoice,i,j;
charx;
head=NULL;
j=1;
while(j)
{printf("\n");
printf("\n\t\t线性表子系统");
printf("\n\t\t*********************************");
printf("\n\t\t*1------建表*");
printf("\n\t\t*2------插入*");
printf("\n\t\t*3------删除*");
printf("\n\t\t*4------显示*");
printf("\n\t\t*5------查找*");
printf("\n\t\t*6------求表长*");
printf("\n\t\t*0------返回*");
printf("\n\t\t*********************************");
printf("\n\t\t请选择菜单号(0--6):
");
scanf("%d",&choice);
getchar();
if(choice==1)
CreateList();
else
if(choice==2)
{printf("\n\t\t请输入插入的位置i和插入的数据(输入格式:
i,x):
");
scanf("%d,%c",&i,&x);
InsList(i,x);
}
else
if(choice==3)
{printf("\n\t\t请输入要删除的数值:
");
scanf("%c",&x);
DelList(x);
}
else
if(choice==4)
if(head==NULL)
printf("\n\t\t请先建立线性表!
");
else
ShowList();
else
if(choice==5)
{printf("\n\t\t请输入要查找的元素:
");
scanf("%c",&x);
SearchList(x);
}
else
if(choice==6)
printf("\n\t\t线性表长度为:
%d",n);
else
if(choice==0)
j=0;
else
printf("\n\t\t输入错误!
请重新输入!
");
}
}
4、测试数据与实验结果
图一建立一个线性表
图二线性表数据的插入
图三线性表数据的删除
图四线性表数据的查找
图五求表长
图六返回
5、结果分析与实验体会
在学过本节有关线性表的两种存储结构的基础操作后,做这个验证性的实验的焦点便在于验证各种操作的正确与否,在对照书上的线性表基本运算的实现的算法思路和注意事项,结合老师上课强调的每种算法的注意重点,找出了原始程序的几个主要的错误点:
1、某些地方运用了C++语言而不是C,如:
每个函数在为申请一块LinkNode类型的存储单元的操作,并将其地址复制给变量时:
p=newLinkNode;而在C环境中应为:
p=(LinkList*)malloc(sizeof(LinkNode));。
再如:
在释放p所指的结点时运用了delete(p);,应该为free(p);。
2、某些地方将赋值语句写在定义该变量的上面,这就直接导致了程序编译时的错误,如:
n=0;linnode*p,*s;charx;intz=1;应改为:
linnode*p,*s;charx;intz=1,n=0;。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 验证 线性 子系统 实验 报告