数据结构课程单链表实验报告.docx

上传人:b****0 文档编号:12612368 上传时间:2023-04-20 格式:DOCX 页数:9 大小:58.43KB
下载 相关 举报
数据结构课程单链表实验报告.docx_第1页
第1页 / 共9页
数据结构课程单链表实验报告.docx_第2页
第2页 / 共9页
数据结构课程单链表实验报告.docx_第3页
第3页 / 共9页
数据结构课程单链表实验报告.docx_第4页
第4页 / 共9页
数据结构课程单链表实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构课程单链表实验报告.docx

《数据结构课程单链表实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程单链表实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构课程单链表实验报告.docx

数据结构课程单链表实验报告

 

郑州轻工业学院

《数据结构》课程实验

 

实验报告

 

题目:

单链表表的基本操作及c语言实现

专业:

信息管理与信息系统

班级:

11-01

**********

完成日期:

2013/5/23

一、试验内容

用c语言实现单链表的建立插入删除查找,合并等内容

二、试验目的

掌握链表的基本操作:

插入、删除、查找等运算,能够灵活应用链表这种数据结构,深入对链表链式结构的了解。

三.源程序代码

#include

#include

typedefintElemtype;

typedefintStatus;

typedefstructnode//定义存储节点

{

intdata;//数据域

structnode*next;//结构体指针

}*linklist,node;//结构体变量,结构体名称

linklistcreat(intn)//创建单链表

{

linklisthead,r,p;//定义头指针r,p,指针

intx,i;

head=(node*)malloc(sizeof(node));//生成头结点

r=head;//r指向头结点

printf("输入数字:

\n");

for(i=n;i>0;i--)//for循环用于生成第一个节点并读入数据

{

scanf("%d",&x);

p=(node*)malloc(sizeof(node));

p->data=x;//读入第一个节点的数据

r->next=p;//把第一个节点连在头结点的后面

r=p;//循环以便于生成第二个节点

}

r->next=0;//生成链表后的断开符

returnhead;//返回头指针

}

voidoutput(linklisthead)//输出链表

{

linklistp;

p=head->next;

do

{

printf("%3d",p->data);

p=p->next;

}

while(p);

printf("\n");

 

}

Statusinsert(linklist&l,inti,Elemtypee)//插入操作

{

intj=0;

linklistp=l,s;

while(j

{

p=p->next;

++j;

}

if(!

p||j>i-1)

return-1;

else

{

s=(node*)malloc(sizeof(node));

s->data=e;

s->next=p->next;

p->next=s;

return1;

}

}

Statusdelect(linklist&l,inti,Elemtype&e)//删除操作

{

intj=0;

linklistp=l,q;

while(jnext)

{

p=p->next;

++j;

}

 

if(!

p->next||j>i-1)

return-1;

else

{

q=p->next;

p->next=q->next;

e=q->data;

free(q);

return1;

}

}

voidcombine(linklistla,linklistlb)//合并单链表

{

node*pa,*pb,*pc;

linklistlc;

pa=la->next;

pb=lb->next;

lc=pc=la;

while(pa&&pb){

if(pa->data<=pb->data){

pc->next=pa;

pc=pa;

pa=pa->next;

}

else{pc->next=pb;pc=pb;pb=pb->next;}

}

pc->next=pa?

pa:

pb;

free(lb);

 

}

StatusGetElem(linklistl,inti,Elemtype&e)//查找操作

{

linklistp;

intj;

p=l->next;

j=1;

while(p&&j

{

p=p->next;

++j;

}

if(!

p||j>i)

return-2;

e=p->data;

returne;

 

}

 

voidmain()

{

linklistla,lb;

intn;

inti,j;

Elemtypee;

printf("请输入第一个链表:

\n");

printf("输入链表元素的个数:

\n");

scanf("%d",&n);

la=creat(n);

printf("输出链表:

\n");

output(la);

printf("请输入要查找元素的位置:

\n");

scanf("%d",&i);

j=GetElem(la,i,e);

printf("所要查找的元素是%d\n",j);

printf("请输入插入位置和元素:

\n");

scanf("%d%d",&i,&e);

insert(la,i,e);

printf("插入后的链表:

\n");

output(la);

printf("请输入要删除的位置:

\n");

scanf("%d",&i);

delect(la,i,e);

printf("删除的那个元素是:

%d\n",e);

printf("输出删除后的顺序表:

\n");

output(la);

printf("请输入第一个非递减链表:

\n");

printf("输入链表元素的个数:

\n");

scanf("%d",&n);

la=creat(n);

printf("输出链表:

\n");

output(la);

printf("请输入第二个非递减链表:

\n");

printf("输入链表元素的个数:

\n");

scanf("%d",&n);

lb=creat(n);

printf("输出链表:

\n");

output(lb);

combine(la,lb);

printf("输出合并后的链表:

\n");

output(la);

}

运行结果如下:

 

六、结果分析与思考

关于单链表的建立要比顺序表难懂,单链表的建立有头插法和尾插法两种,我选用的是尾插法,尾插法较之头插法更为简单和使用,一定要熟练使用。

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

当前位置:首页 > 解决方案 > 学习计划

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

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