单链表的基本操作_第1页
单链表的基本操作_第2页
单链表的基本操作_第3页
单链表的基本操作_第4页
单链表的基本操作_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

单链表的基本操作

实验一线性表的基本操作及其应用一、实验目的

1、帮助读者复习C语言程序设计中的知识。

、熟悉线性表的逻辑结构。2

3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操

作为侧重点。

二、实验内容

本次实验提供3个题目,每个题目都标有难度系数,*越多难度越大,学生

可以根据自己的情况任选一个〜

题目一:单链表的基本操作(*)

[问题描述]

实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等

单链表的基本操作。

[基本要求]

(1)依次从键盘读入数据,建立带头结点的单链表;

(2)输出单链表中的数据元素

(3)求单链表的长度;

(4)根据指定条件能够取元素和修改元素;

(5)实现在指定位置插入和删除元素的功能。【程序调试】

#include<malloc.h>/*malloc()等*/

#includo<stdio.h>/*scanf(),NULL*/#include<stdlib.h>/*free()

#include<conio.h>/*getch()*/

/*函数结果状态代码*/

#defineOK1

^defineERROR0

typedefintStatus;

typcdcfintElcmType;

typedefstructLNode

{

ElcinTypcdata;

structLNode*next;

}LNode,*LinkList;

voidCreateList(LinkList*L,intn)/*算法2.11*/

{/*逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L

inti;

LinkListp;

*L=(LinkList)malloc(sizeof(structLNode));

(*L)->next=NULL;/*先建立一个带头结点的单链表*/

printf(“请输入%d个数据\n”,n);

for(i=n;i>0;—i)

(

p=(LinkList)malloc(sizeof(structLNode));/*生成新结点*/

scanf(,,%d/,,&p->data);/*输入元素值*/

p->next=(*L)->next;/率插入到表头*/

(*L)->next=p;

)

)

voidCreateList2(LinkList*L,intm)

{/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表L

inti;

LinkListp,q;

*L=(LinkList)malloc(sizcof(structLNode));/*生成头结点*/

(*L)->next=NULL;

q=*L;

printf("请输入%d个数据\n〃,m);

for(i=l;i<=m;i++)

(

p二(LinkList)malloc(sizeof(structLNode));

scanf&p->data);

q->next=p;

q=q->next;

}

p->next=NULL;

)

voidPrint1inklist(LinkListL)

LNode*p;

p=L->next;

while(p)

{printfp->data);

if(p->next)printf(*一>");

p=p->next;

)

printf(〃\n");

}

StatusListInsert(LinkListL,inti,ElemTypcc)/*算法2.9。不改变L

{/*在带头结点的单链线性表L中第i个位置之前插入元素e*/

int尸0;

LinkListp=L,s;

while(p&&j<i-l)/*寻找第i-1个结点*/

(

p=p->next;

j++;

}

if(!p||j>i-l)/*i小于1或者大于表长*/

returnERROR;

s=(LinkList)malloc(sizeof(structLNode));/*生成新结点*/

s->data=e;/*插入L中*/

s->next=p->next;

p->next=s;

returnOK;

}

StatusListDelete(LinkListL,inti,ElemType*e)/*算法2.10。不改变

L*/

{/*在带头结点的单链线性表L中,删除第i个元素,并由e返回其值*/

intj=0;

LinkListp=L,q;

while(p->next&&j<i-1)/*寻找第i个结点,并令p指向其前岖*/

(

p=p->next;

j++;

)

if(!p->next||j>i-l)/*删除位置不合理*/

returnERROR;

q=p->next;/*删除并释放结点*/

p->next=q->next;

*e=q->data;

free(q);

returnOK;

}

intListlength(LinkList*L)//求链表长度{

LNode*p;〃链表的单个元素指针,而不能用链表intj=0;

p二L;〃将其指向链表的第一个元素

while(p->next!=NULL){

++j;

p=p->next;

)

returnj;

)

intGctElem(LinkListL,inti)

(

intj,e;

LinkListp=NULL;

if(i<l|i>Listlength(L))

(

prinlf(〃输入的位置不合法〜〜〜\n");

return;

}

p=L->next;

J=1;

while(j<i)

(

p=p->next;

j++;

)

e=p->data;

printf("第%d位的数据元素为%d\n〃,i,e);

voidmain()

inti,n,m,v,z;

LinkListLa,Lb;

ElemTypeel,e2;

printf(〃头插法逆位序建表\n〃);

printf(〃请输入n值(即是链表长度):〃);

scanf&n);

CreatcList(&La,n);/*逆位序输入n个元素的值*/

printf("La=〃);/*输出链表La的内容*/

Printlinklist(La);

printf(〃\n");

printf(〃按尾插法正序建表:\n〃);

printf("请输入m值(即是链表长度);

scanf&m);

CreateList2(&Lb,m);/*逆位序输入n个元素的值*/

printf(*Lb=");/*输出链表Lb的内容*/

Printlinklist(Lb);

printf(〃\n");

printf("输入在第一个链表插入的位置i=");

scanf("%d〃,&i);

printf(〃\n〃);

printf(〃输入在第一个链表插入的元素el二〃);

scanf(飞d”,&el);

printfC\nz,);

Listinsert(La,i,el);

printf(〃在第一个链表插入后La二〃);/*输出链表La的内容*/

Printlinklist(La);

printf(〃\n〃);

printf(〃按任意整数求第一个链表表长〃);

scanf&v);

Listlength(La);

printf(〃第一个链表的长度为%d〃,Listlength(La));

printf(〃\n〃);

printf(〃在第一个链表中,请输入要取出的数的位置数〃);

scanf("%d",&z);

GetElem(La,z);

printf("\n");

printf(〃在第一个链表中,输入删除的位置i二〃);

scanf("机T,&i);

printf(〃\n");

ListDelete(La,i,&e2);

printf(〃删除后La=〃);/*输出链表La的内容*/

Printlinklist(La);

printf(〃\n〃);

printf("在第一个链表中,被删除的元素的值e2=%d\n',e2);

Listlength(La);

whiled);

)

【运行结果】

《胃”厅,>飞

*玷,6代<却石足&士传>4

i$>3A数显

2:怀719S24

尸2Sm->?«—>34>12

受总存叁型柠林&》;、

转入5不数据

9R4S3n6,

36一X、->23—>«

、在第一彳秘去香、的也5U-3

.不布一个3*.啬\内兀*7•5G

学4E八径入\J2、一》八一KG-

温馨提示

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

评论

0/150

提交评论