顺序表和单链表实验报告Word文档格式.docx
《顺序表和单链表实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《顺序表和单链表实验报告Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
内存申请错误!
\n"
);
exit
(1);
}
L->
size=0;
MaxSize=ms;
}
intInsertList(LIST*L,intitem,intrc)
inti;
if(L->
size>
=L->
MaxSize)
return-1;
if(rc<
0)
rc=0;
if(rc>
L->
size)
rc=L->
size;
for(i=L->
size-1;
i>
=rc;
i--)
L->
list[i+1]=L->
list[i];
list[rc]=item;
size++;
return0;
voidOutputList(LIST*L)
for(i=0;
i<
i++)
%d"
L->
list[i]);
intFindList(LIST*L,intitem)
if(item==L->
list[i])
returni;
return-1;
intDeleteList1(LIST*L,intitem)
inti,n;
break;
if(i<
size){
for(n=i;
n<
n++)
L->
list[n]=L->
list[n+1];
L->
size--;
}
intDeleteList2(LIST*L,intrc)
0||rc>
for(n=rc;
voidmain()
LISTLL;
inti,r;
printf("
listaddr=%p\tsize=%d\tMaxSize=%d\n"
LL.list,LL.size,LL.MaxSize);
InitList(&
LL,100);
while
(1)
{
请输入元素值,输入0结束插入操作:
"
fflush(stdin);
scanf("
%d"
&
i);
if(i==0)
请输入插入位置:
r);
InsertList(&
LL,i,r-1);
线性表为:
OutputList(&
LL);
请输入查找元素值,输入0结束查找操作:
r=FindList(&
LL,i);
if(r<
printf("
没找到\n"
else
有符合条件的元素,位置为:
%d\n"
r+1);
请输入删除元素值,输入0结束查找操作:
r=DeleteList1(&
else{
%d\n线性表为:
OutputList(&
请输入删除元素位置,输入0结束查找操作:
if(r==0)
i=DeleteList2(&
LL,r-1);
位置越界\n"
4.运行结果
二、单链表操作验证
⑴掌握线性表的链式存储结构;
⑵验证单链序表及其基本操作的实现;
⑶进一步掌握数据结构及算法的程序实现的基本方法。
⑴用头插法(或尾插法)建立带头结点的单链表;
⑵对已建立的单链表实现插入、删除、查找等基本操作。
typedefstructlist
intdata;
structlist*next;
}LIST;
voidInitList(LIST**p)
*p=NULL;
voidInsertList1(LIST**p,intitem,intrc)
LIST*u,*q,*r;
u=(LIST*)malloc(sizeof(LIST));
u->
data=item;
for(i=0,r=*p;
rc&
&
r!
=NULL;
i++){
q=r;
r=r->
next;
if(r==*p)
*p=u;
else
q->
next=u;
next=r;
voidInsertList2(LIST**p,intitem)
for(r=*p;
=NULL&
r->
data<
item;
q=r,r=r->
next);
intDeleteList(LIST**p,intitem)
LIST*q,*r;
q=*p;
r=q;
if(q==NULL)
return1;
if(q->
data==item){
*p=q->
free(r);
return0;
for(;
q->
data!
=item&
next!
r=q,q=q->
r->
next=q->
free(q);
return1;
intFindList(LIST*p,intitem)
for(i=1;
p->
p!
p=p->
next,i++);
return(p==NULL)?
-1:
i;
voidOutputList(LIST*p)
while(p!
=NULL){
%4d"
p->
data);
p=p->
printf("
voidFreeList(LIST**p)
LIST*q,*r;
for(q=*p;
q!
){
r=q;
q=q->
free(r);
intmain()
LIST*p;
intop,i,rc;
InitList(&
p);
请选择操作1:
指定位置追加2:
升序追加3:
查找结点\n"
4:
删除结点5:
输出结点6:
清空链表0:
退出\n"
%d"
op);
switch(op){
case0:
return-1;
case1:
请输入新增结点键值和位置:
scanf("
%d%d"
i,&
rc);
InsertList1(&
p,i,rc);
case2:
请输入新增结点键值:
InsertList2(&
p,i);
case3:
请输入要查找结点的键值:
rc=FindList(p,i);
if(rc>
printf("
位置为[%d]\n"
rc);
else
没找到\n"
case4:
请输入要删除结点的键值:
rc=DeleteList(&
if(rc==0)
删除成功\n"
case5:
链表内容为:
OutputList(p);
case6:
FreeList(&
三、心得体会
在本次实验中,让我对线性表和链表有了充分的理解,也对数据结构这门课程有了进一步的理解。
同时,我也认识到了c语言的确是编程的基础,希望自己把基础加以巩固。
调试过程中总是遇到一些小问题,如漏了分号,还有就是不知一些代码如何写,通过看书和上网查资料解决了。