实验三 实现单链表的各种运算.docx

上传人:b****4 文档编号:3590032 上传时间:2022-11-24 格式:DOCX 页数:7 大小:86.44KB
下载 相关 举报
实验三 实现单链表的各种运算.docx_第1页
第1页 / 共7页
实验三 实现单链表的各种运算.docx_第2页
第2页 / 共7页
实验三 实现单链表的各种运算.docx_第3页
第3页 / 共7页
实验三 实现单链表的各种运算.docx_第4页
第4页 / 共7页
实验三 实现单链表的各种运算.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

实验三 实现单链表的各种运算.docx

《实验三 实现单链表的各种运算.docx》由会员分享,可在线阅读,更多相关《实验三 实现单链表的各种运算.docx(7页珍藏版)》请在冰豆网上搜索。

实验三 实现单链表的各种运算.docx

实验三实现单链表的各种运算

实验三实现单链表的各种运算

姓名尹亮学号:

2009131334班级:

09计算机三班

一、实验目的 

了解单链表表的结构特点及有关概念,掌握单链表的各种基本操作算法思想及其实现。

二、实验内容

   编写一个程序,实现顺序表的各种基本运算:

1、初始化单链表;              2、单链表的插入;

   3、单链表的输出;             4、求单链表的长度

   5、判断单链表是否为空;6、输出单链表的第i位置的元素;

   7、在单链表中查找一个给定元素在表中的位置;

   8、单链表的删除;              9、释放单链表

三、实验要点及说明 

   单链表是线性表的链式存储结构的一种形式,它用一组地址任意的存储单元存放线性表的各个元素。

具体程序如下:

#include

#include

typedefcharelemtype;

typedefstructLNode

{

elemtypedata;

structLNode*next;

}linklist;

voidinitlist(linklist*&L)

{

L=(linklist*)malloc(sizeof(linklist));

L->next=NULL;

}

voiddestroylist(linklist*&L)

{

linklist*p=L,*q=p->next;

while(q!

=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p);

}

intlistempty(linklist*L)

{

return(L->next==NULL);

}

intlistlength(linklist*L)

{

linklist*p=L;inti=0;

while(p->next!

=NULL)

{

i++;

p=p->next;

}

return(i);

}

voiddisplist(linklist*L)

{

linklist*p=L->next;

while(p!

=NULL)

{

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

intgetelem(linklist*L,inti,elemtype&e)

{

intj=0;

linklist*p=L;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

return0;

else

{

e=p->data;

return1;

}

}

intlocateelem(linklist*L,elemtypee)

{

linklist*p=L->next;

intn=1;

while(p!

=NULL&&p->data!

=e)

{

p=p->next;

n++;

}

if(p==NULL)

return(0);

else

return(n);

}

intlistinsert(linklist*&L,inti,elemtypee)

{

intj=0;linklist*p=L,*s;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

return0;

else

{s=(linklist*)malloc(sizeof(linklist));

s->data=e;

s->next=p->next;

p->next=s;

return1;

}

}

intlistdelete(linklist*&L,inti,elemtype&e)

{

intj=0;

linklist*p=L,*q;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

return0;

else

{q=p->next;

if(q==NULL)return0;

e=q->data;

p->next=q->next;

free(q);

return1;

}

}

voidmain()

{

linklist*h;

elemtypee;

printf("

(1)初始化单链表h\n");

initlist(h);

printf("

(2)依次采用尾插法插入a,b,c元素\n");

listinsert(h,1,'a');

listinsert(h,1,'b');

listinsert(h,1,'c');

listinsert(h,1,'d');

listinsert(h,1,'e');

printf("(3)输出单链表h:

");

displist(h);

printf("(4)单链表h的长度=%d\n",listlength(h));

printf("(5)单链表h为%s\n",(listempty(h)?

"空":

"非空"));

getelem(h,3,e);

printf("(6)单链表h的第3个元素=%c\n",e);

printf("(7)元素a的位置=%d\n",locateelem(h,'a'));

printf("(8)在第4个元素位置上插入f元素\n");

listinsert(h,4,'f');

printf("(9)输出单链表h:

");

displist(h);

printf("(10)删除h的第3个元素\n");

listdelete(h,3,e);

printf("(11)输出单链表h:

");

displist(h);

printf("(12)释放单链表h\n");

destroylist(h);

}

四,测试与结果

结果:

五,算法思想:

单链表中重要的也是插入节点的运算,即将值为x的新节点插入到第i个节点的位置,现在单链表中找到第i-1个节点,再在其后插入新的节点,假设要在单链表的两个数据分别为a和b的结点之间插入一个数据域为x的结点。

P是指向数据域a的结点,s指向数据域为x的结点,为了插入结点*s需要修改结点*p中的指针域,令其指向结点*s而结点s中的指针域应指向结点b,从而实现3个节点之间的逻辑关系的变化。

六,心得体会:

通过这次试验,我知道了什么事情都得自己动手去思考,去理解,把这些东西都化为自己脑子里的东西,慢慢脱离书本,我知道现在自己的基础不好,但是我相信,慢慢的会变好的!

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1