2023年数据结构课程单链表实验报告_第1页
2023年数据结构课程单链表实验报告_第2页
2023年数据结构课程单链表实验报告_第3页
2023年数据结构课程单链表实验报告_第4页
2023年数据结构课程单链表实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

郑州轻工业学院

《数据结构》课程实验

实验报告

题目:单链表表的基本操作及C语言实现

专业:__________信息管理与信息系统

班级:_______________11-01________________________

姓名:________________高博文________________________

完毕日期:____________2023/5/23___________________

一、实验内容

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

二、实验目的

掌握链表的基本操作:插入、删除、查找等运算,可以灵活应用链表这种数据结构,进一步对

链表链式结构的了解。

三.源程序代码

#include<stdio.h>

#inc1ude<stdlib.h>

typedefintE1emtype:

typedefintStatus;

typedefstructnode〃定义存储节点

(

intdata;//数据域

structnode*next;//结构体指针

}*link1ist,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循环用于生成第一个节点并读入数据

°{

oscanf(n%dx);

。叩二(node*)malloc(sizeof(node));

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

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

。尸P;//循环以便于生成第二个节点

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

returnhead;//返回头指针

)

voidoutput(linklisthead)//输出链表

(

linklistp;

p=head->next;

o

(

printf(n%3dH,p->data);

ep=p—>next;

0)

while(p);

oprintf("\n");

)

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

(

“ntj=0;

linklistp=l,s;

while(j<i-l&&p)

(

叩二p->next;

++j:

)

if(!p|Ij>i-1)

^return-1;

e1se

gs=(node*)ma11oc(sizeof(node));

s->data=e;

。s->next=p->next;

®p->next=s;

dreturn1;

°)

)

Statusde1ect(linklist&1,inti,Elemtype&e)〃删除操作

(

Antj=0;

linklistp=1,q;

whi1e(j<i-1&&p->next)

(

叩二P->next;

++j;

)

if(!p->next|Ij>i-1)

^return-1;

else

(

oq=p->next;

叩->next=q->next;

e=q->data;

free(q);

®return1;

voidcombine(1ink1istla,link!istlb)//合并单链表

0node*pa,*pb,*pc;

olinklist1c;

。pa=la->next;

pb=lb—>next;

lc=pc=la;

while(pa&&pb){

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

gpc—>next=pa;

gpc=pa;

^pa=pa->next;

)

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

)

叩c->next=pa?pa:pb;

free(lb);

)

StatusGetE1em(linklist1,inti,Elemtype&e)〃查找操作

(

。linklistp;

°intj;

p=l->next;

J=1;

。whi1e(p&&j<i)

p=p->next;

0++j;

)

。if(!PIIj>i)

oreturn-2;

e=p->data;

oreturne;

)

voidmain()

(

o1inklist1a,lb;

Antn;

inti,j;

E1emtypee;

printf("请输入第一个链表:\nH);

printf("输入链表元素的个数:\n");

seanf(n%dn,&n);

01a=creat(n);

叩rintf("输出链表:\n)

output(la);

叩rintf(”请输入要查找元素的位置:\n");

scanf(u%dM,&i);

j=GetE1em(la,i,e);

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

Printf("请输入插入位置和元素:'n");

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

insert(la,i,e);

Printf("插入后的链表:\n");

output(1a);

Printf("请输入要删除的位置:\n");

scanf("%d",&i);

delect(1a,i,e);

Printf("删除的那个元素是:%d\n",e);

printf("输出删除后的顺序表:\n");

outpul(la);

oprintf("请输入第一个非递减链表:\n");

。printf("输入链表元素的个数:\n");

seanf("%d",&n);

la=creat(n);

printf("输出链表:\n");

•output(1a);

printf("请输入第二个非递减链表:\n");

•printf("输入链表元素的个数:\n");

scanf("%d",&n):

1b=creat(n);

oprintf("输出链表:\n");

oulput(lb);

combine(1a,lb);

printf("输出合并后的链表:\n");

°output(la);

)

运营结果如下:

,*C:\Users\moyuxuan\Desktop\Debug\thl.exe"

输入链袤元去的个数:

谿入数字:

1

3

5

输出链表:

1357

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

2

2

立人后的链表:

1535?

请输入要删除的位置:

#犒翻嘉谭塞

却整需臂表:

■入数字:

1

2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论