2023年数据结构课程单链表实验报告.docx
郑州轻工业学院数据结构课程实验实验报告题目:单链表表的基本操作及C语言实现专业:信息管理与信息系统班级:11-01姓名:高博文完毕日期:202 3 /5/2 3一、实验内容用C语言实现单链表的建立插入删除查找,合并等内容二、实验目的掌握链表的基本操作:插入、删除、查找等运算,可以灵活应用链表这种数据结构,进一步对 链表链式结构的了解。三.源程序代码#incl u d e <stdio.h>#inc 1 u d e <st d lib. h>t y p e de f i nt E 1 emtype:typcdcf int St a tus;type def s truct no d e定义存储节点(i n t data; / / 数据域struc t n o de *ne x t; / / 结构体指针 *link 1 ist,no d e; /结构体变量,结构体名称lin k lis t creat (int n ) / /创建单链表#linkli s t head,r,p;定义头指针 r ,p,指针i n t x,i;h ead=(node *)mall o c (s i ze o f(node);生成头结点。r =he a d; / / r指向头结点pr i ntf("输入数字:n");ofo r ( i =n;i>0; i )/for循环用于生成第一个节点并读入数据°-scanfC'% d x );«p=(no d e *)malloc (siz e o f (node);p->d a( a =xj/读入第一个节点的数据«r-> n e xt=p; / /把第一个节点连在头结点的后面。尸P ; / /循环以便于生成第二个节点r->n ext=O;生成链表后的断开符return head;/ /返回头指针)void o u tput (lin k )i s t head)/输出链表linklist p;p=he a d->ne x t;od op r i ntf ("3d”,p->data);»p = p ->next;while( p);叩 rintf("n ");)Status inse r t (lin k list &1, i nt i, Elemtype e) / / 插入操作 “n t j =0;lin k list p =l,s;while(j<i-l && p)(»p=p->n e xt;+j;)i f ( ! p | I j>i-1 ) return -1;e 1 se(nod e *) m a II o c(sizeof (node);s-> d ata =e;3s-> n e xt=p->nex t ;»p->n ext =s;return 1;°)St a t us de 1 eel (linkli s t &l, i nt i, Elemtyp e &e)删除操作 in t j=0;link 1 i s t p= 1 , q;wh i 1 e (j <i- 1 && p -> n ext)叩: P ->next;+j;if(! p->nex t | | j> i -1)we t urn -I;els e(aq= p - >ne x t ;*p->nc x t=q->nc x t;e=q->data;f rce( q);®r e turn 1;v oid comb i ne ( 1 i nk 1 i s t la,linkl i st lb) / / 合并单链表° n o d e *pa,*pb,*p c ;»linkl i st 1 c ;»p a=la->next;pb=lb>next;lc=pc=la;w h i le(p a & & p b ) 。i f( p a->data<=p b ->da t a)ape> n ext=p a ;g pc=pa;w»pa=pa->ne x t ;)e 1 sepc-> n e x t = p b;pc= p b;pb=p b ->n ext;)®pc->n e x t = p a? p a: p b ; f ree (lb);)St a tus G e t E 1 em (linkli s t 1, i n t i,Elem t ype &e )查找操作 (。lin k list p;°int j;p=l->ncxt;。wh i 1 e ( p && j<i)p=p->n ext;0+j;I。i f(! P II j >i), re t urn 2;e=p-> d ata;。ret u r n e; void main()(» 1 i n k 1 i st 1 a,lb;»i n t n;inti, j;E 1 emtype e;p r i nlf ("请输入第一个链表:n");pr i ntf ("输入链表元素的个数素的;sea n f("%d",& n );o| a = c real (n);叩ri nt f ("输出链表:n”);outp u t (la);叩ri n t f ("请输入要查找元素的位置:n ");scanf("%d",&i);j =Ge t E 1 em(la,i,e);叩r intf("所要查找的元素是dn", j );P r intf("请输入插入位置和元素:n”);s can f ( " %d%d”,&i, &e);i nsert(l a , i , e );P r intf (”插入后的链表:n*);o u(pul( 1 a);P r in t f("请输入要删除的位置:n ");scanf ("d”,&i);d e Ject ( 1 a ,i,e);pr i nif ("删除的那个元素是:%dn",e);prin tf("输出删除后的顺序表:n ");ou t put(la);叩r in t f("请输入第一个非递减链表:n ");叩rintf("输入链表元素的个数:n");sea n f ("%d ",&n);la= c reat(n);printf ("输出链表:n ");o o u t put ( 1 a);pr i nlf("请输入第二个非递减链表:n ");叩rintf("输入链表元素的个数:n");sc a nf("%d", &n);1 b = c reat(n);叩rin t f("输出链表:n ");oulpul(lb);combi n e ( 1 a,lb);prin tf ("输出合并后的链表:' n"); »outp u t (la);运营结果如下:"C:UsersmoyuxuanDesldopDebugthl.exe"入数字:137输出链表:13 5 7请输入要查找元素的位置;2插入后的链表:1 5 3 5 7请输入要删除的位置;2疑髓睛翻嘉递减链表:本人数字:12输出链表:12 4谓输;粉了I涟I蠲糟表:谿入数字:23,出链表:备善并看的链表:1 2 2 3 4 5Press any key to cont inue六、结果分析与思考关于单链表的建立要比顺序表难懂,单挂表的建立有头插法和尾插法两种,我选用的是尾插法, 尾插法较之头插法更为简朴和使用,一定要纯熟使用。