数据结构实验5单链表配套代码.docx

上传人:b****1 文档编号:214837 上传时间:2023-04-28 格式:DOCX 页数:20 大小:18.19KB
下载 相关 举报
数据结构实验5单链表配套代码.docx_第1页
第1页 / 共20页
数据结构实验5单链表配套代码.docx_第2页
第2页 / 共20页
数据结构实验5单链表配套代码.docx_第3页
第3页 / 共20页
数据结构实验5单链表配套代码.docx_第4页
第4页 / 共20页
数据结构实验5单链表配套代码.docx_第5页
第5页 / 共20页
数据结构实验5单链表配套代码.docx_第6页
第6页 / 共20页
数据结构实验5单链表配套代码.docx_第7页
第7页 / 共20页
数据结构实验5单链表配套代码.docx_第8页
第8页 / 共20页
数据结构实验5单链表配套代码.docx_第9页
第9页 / 共20页
数据结构实验5单链表配套代码.docx_第10页
第10页 / 共20页
数据结构实验5单链表配套代码.docx_第11页
第11页 / 共20页
数据结构实验5单链表配套代码.docx_第12页
第12页 / 共20页
数据结构实验5单链表配套代码.docx_第13页
第13页 / 共20页
数据结构实验5单链表配套代码.docx_第14页
第14页 / 共20页
数据结构实验5单链表配套代码.docx_第15页
第15页 / 共20页
数据结构实验5单链表配套代码.docx_第16页
第16页 / 共20页
数据结构实验5单链表配套代码.docx_第17页
第17页 / 共20页
数据结构实验5单链表配套代码.docx_第18页
第18页 / 共20页
数据结构实验5单链表配套代码.docx_第19页
第19页 / 共20页
数据结构实验5单链表配套代码.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构实验5单链表配套代码.docx

《数据结构实验5单链表配套代码.docx》由会员分享,可在线阅读,更多相关《数据结构实验5单链表配套代码.docx(20页珍藏版)》请在冰点文库上搜索。

数据结构实验5单链表配套代码.docx

数据结构实验5单链表配套代码

数据结构实验5配套代码

1、

#include

#include

#include

#defineOK1

#defineERROR0

#defineOVERFLOW-2

#defineMAXSIZE100

#defineNULL0

typedefintStatus;

typedefintElemType;

typedefstructLNode

{

ElemTypedata;//数据域

structLNode*next;//指针域

}LNode,*LinkList;//*LinkList为Lnode类型的指针

intmain()

{

LNode*La=NULL;

charchoice1,choice2,choice3;//菜单选项

ElemTypeb[MAXSIZE],b1[MAXSIZE],x,z;

inti,num,num1,n,m,e,y;

StatusInitList_L(LinkList&L);

voidCreateList_L(LinkList&L,ElemTypea[],intn);

StatusDispList_L(LinkListL);

intListEmpty(LinkListL);

StatusGetElem_L(LinkListL,inti,ElemType&e);

intLocateELem_L(LinkListL,ElemTypee);

StatusListInsert_L(LinkList&L,inti,ElemTypee);

StatusListDelete_L(LinkList&L,inti,ElemType&e);

intListLength_L(LinkListL);

StatusClearList(LinkList&L);

StatusDestroyList_L(LinkList&L);

InitList_L(La);

printf("线性表中元素的个数?

\n");

scanf("%d",&num);

printf("请输入元素:

\n");

for(i=0;i

scanf("%d",&b[i]);

CreateList_L(La,b,num);

do

{

printf("\t单链表操作\n");

printf("P-输出\t\tG-取值\n");

printf("S-查找\t\tI-插入\n");

printf("D-删除\t\tC-清空\n");

printf("L-求表长\tQ-退出\n");

scanf("%c",&choice1);

choice1=toupper(choice1);//将字符choice转换为大写英文字母

switch(choice1)

{

case'P':

printf("线性表中的元素为:

\n");

DispList_L(La);

break;

case'G':

printf("要查找第几个元素?

\n");

scanf("%d",&n);

m=GetElem_L(La,n,e);

if(!

m)

printf("要查找的元素位置不合法!

\n");

else

printf("要查找的第%d个元素是:

%d\n",n,e);

break;

case'S':

printf("要查找的元素的值为:

\n");

scanf("%d",&x);

m=LocateELem_L(La,x);

if(!

m)

printf("线性表中不存在该元素!

\n");

else

printf("%d是本表中的第%d个元素。

\n",x,m);

break;

case'I':

printf("在第几个元素前面插入?

\n");

scanf("%d",&y);

printf("插入的值为:

\n");

scanf("%d",&z);

m=ListInsert_L(La,y,z);

if(!

m)

printf("插入元素失败!

\n");

else

{

printf("在第%d个元素前面插入%d后的线性表为:

\n",y,z);

DispList_L(La);

}

break;

case'D':

printf("要删除第几个元素?

\n");

scanf("%d",&y);

m=ListDelete_L(La,y,e);

if(!

m)

printf("删除元素失败!

\n");

else

{

printf("删除掉第%d个元素后的线性表为:

\n",y);

DispList_L(La);

}

break;

case'L':

printf("线性表的长度为:

%d\n",ListLength_L(La));

break;

case'C':

printf("确定要清空线性表吗?

\n");

scanf("%c",&choice2);

choice2=toupper(choice2);

if(choice2=='Y')

{

ClearList(La);

printf("需要重新创建线性表吗?

\n");

scanf("%c",&choice3);

choice3=toupper(choice3);

if(choice3=='Y')

{

printf("线性表中元素的个数?

\n");

scanf("%d",&num1);

printf("请输入元素:

\n");

for(i=0;i

scanf("%d",&b1[i]);

CreateList_L(La,b1,num1);

printf("新创建的线性表为:

\n",y);

DispList_L(La);

}

}

break;

case'Q':

DestroyList_L(La);

printf("再见!

\n");

break;

default:

printf("不正确的选项!

\a");

}

printf("\n");

}

while(choice1!

='Q');

return0;

}

StatusInitList_L(LinkList&L)

{

L=newLNode;//创建头结点

L->next=NULL;//置头结点的指针域为空

returnOK;

}

voidCreateList_L(LinkList&L,ElemTypea[],intn)

//正位序输入n个元素的值,建立带表头结点的单链表L

{

LinkListp,r;

inti;

r=L;//r总是指向当前尾结点,初始时r指向头结点

for(i=0;i

{

p=newLNode;

p->data=a[i];//输入元素值

p->next=NULL;

r->next=p;//插入到表尾

r=p;//r指向新的尾结点

}

r->next=NULL;

}

intListEmpty(LinkListL)//若L为空表,则返回1,否则返回0

{

if(L->next)//L->next不为0,即非空

return0;

else

return1;

}

StatusDispList_L(LinkListL)

{

LinkListp;

if(ListEmpty(L))

returnERROR;

else

{

p=L->next;

while(p)//p不空则继续输出

{

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

p=p->next;

}

printf("\n");

}

}

StatusGetElem_L(LinkListL,inti,ElemType&e)

{

LinkListp;

intj=1;

p=L->next;//初始化

while(p&&j

{//向后扫描,直到p指向第i个元素或p为空

p=p->next;

++j;

}

if(!

p||j>i)

returnERROR;//第i个元素不存在

e=p->data;//取第i个元素

returnOK;

}

intLocateELem_L(LinkListL,ElemTypee)

//返回L中值为e的数据元素的位置序号,查找失败返回0

{

LinkListp;

intj=1;

p=L->next;

while(p&&p->data!

=e)

{

p=p->next;

j++;

}

if(p)

returnj;

else

return0;

}

StatusListInsert_L(LinkList&L,inti,ElemTypee)

{

LinkListp,s;

intj=0;

p=L;

while(p&&j

{

p=p->next;

++j;

}//寻找第i-1个结点

if(!

p||j>i-1)

returnERROR;//i大于表长+1或者小于1

s=newLNode;//生成新结点s

s->data=e;//将结点s的数据域置为e

s->next=p->next;//将结点s插入L中

p->next=s;

returnOK;

}

StatusListDelete_L(LinkList&L,inti,ElemType&e)

{

LinkListp,q;

intj=0;

p=L;

while(p->next&&j

{//寻找第i个结点,并令p指向其前驱

p=p->next;

++j;

}

if(!

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

returnERROR;//删除位置不合理

q=p->next;//临时保存被删结点的地址以备释放

p->next=q->next;//改变删除结点前驱结点的指针域

e=q->data;//保存删除结点的数据域

deleteq;//释放删除结点的空间

returnOK;

}

intListLength_L(LinkListL)//返回L中数据元素个数

{

LinkListp;

inti=0;

p=L->next;//p指向第一个结点

while(p)

{//遍历单链表,统计结点数

i++;

p=p->next;

}

returni;

}

StatusClearList(LinkList&L)//将L重置为空表

{

LinkListp,q;

p=L->next;//p指向第一个结点

while(p)//没到表尾

{

q=p->next;

deletep;

p=q;

}

L->next=NULL;//头结点指针域为空

returnOK;

}

StatusDestroyList_L(LinkList&L)//销毁

{

LinkListp;

while(L)

{

p=L;

L=L->next;

deletep;

}

returnOK;

}

14、

#include

#include

#include

#defineOK1

#defineERROR0

#defineOVERFLOW-2

#defineMAXSIZE100

#defineNULL0

typedefintStatus;

typedefintElemType;

typedefstructLNode

{

ElemTypedata;//数据域

structLNode*next;//指针域

}LNode,*LinkList;//*LinkList为Lnode类型的指针

intmain()

{

LNode*La=NULL;

ElemTypeb[MAXSIZE],x;

inti,num;

StatusInitList_L(LinkList&L);

voidCreateList_L(LinkList&L,ElemTypea[],intn);

StatusDispList_L(LinkListL);

intListEmpty(LinkListL);

ElemTypeMax_L(LinkListL);

InitList_L(La);

printf("线性表中元素的个数?

\n");

scanf("%d",&num);

printf("请输入元素:

\n");

for(i=0;i

scanf("%d",&b[i]);

CreateList_L(La,b,num);

if(ListEmpty(La))

printf("线性表为空!

\n");

else

{

printf("线性表为:

\n");

DispList_L(La);

x=Max_L(La);

printf("线性表中最大的数据为:

%d",x);

}

return0;

}

StatusInitList_L(LinkList&L)

{

L=newLNode;

L->next=NULL;

returnOK;

}

voidCreateList_L(LinkList&L,ElemTypea[],intn)//正位序输入n个元素的值,建立带表头结点的单链表L

{

LinkListp,r;

inti;

r=L;//尾指针r指向头结点

for(i=0;i

{

p=newLNode;

p->data=a[i];//输入元素值

p->next=NULL;

r->next=p;//插入到表尾

r=p;//r指向新的尾结点

}

}

intListEmpty(LinkListL)//若L为空表,则返回1,否则返回0

{

if(L->next)//非空

return0;

else

return1;

}

StatusDispList_L(LinkListL)

{

LinkListp;

if(ListEmpty(L))

returnERROR;

else

{

p=L->next;

while(p)

{

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

p=p->next;

}

printf("\n");

}

}

ElemTypeMax_L(LinkListL)

{

LinkListp;

ElemTypemax;

max=L->next->data;//假定第一个结点中数据具有最大值

p=L->next->next;

while(p)

{

if(p->data>max)

max=p->data;//如果p所指结点的值大于max的值,则重新赋值

p=p->next;//遍历链表

}

returnmax;

}

15、

#include

#include

#include

#defineOK1

#defineERROR0

#defineOVERFLOW-2

#defineMAXSIZE100

#defineNULL0

typedefintStatus;

typedefintElemType;

typedefstructLNode

{

ElemTypedata;//数据域

structLNode*next;//指针域

}LNode,*LinkList;//*LinkList为Lnode类型的指针

intmain()

{

LNode*La=NULL;

ElemTypeb[MAXSIZE],max,min;

inti,num;

StatusInitList_L(LinkList&L);

voidCreateList_L(LinkList&L,ElemTypea[],intn);

StatusDispList_L(LinkListL);

intListEmpty(LinkListL);

voidDelete_maxmin(LinkList&L,intmink,intmaxk);

InitList_L(La);

printf("线性表中元素的个数?

\n");

scanf("%d",&num);

printf("请输入元素:

\n");

for(i=0;i

scanf("%d",&b[i]);

CreateList_L(La,b,num);

if(ListEmpty(La))

printf("线性表为空!

\n");

else

{

printf("线性表为:

\n");

DispList_L(La);

printf("maxis:

\n");

scanf("%d",&max);

printf("minis:

\n");

scanf("%d",&min);

Delete_maxmin(La,min,max);

printf("删除之后的线性表为:

\n");

DispList_L(La);

}

return0;

}

StatusInitList_L(LinkList&L)

{

L=newLNode;

L->next=NULL;

returnOK;

}

voidCreateList_L(LinkList&L,ElemTypea[],intn)//正位序输入n个元素的值,建立带表头结点的单链表L

{

LinkListp,r;

inti;

r=L;//尾指针r指向头结点

for(i=0;i

{

p=newLNode;

p->data=a[i];//输入元素值

p->next=NULL;

r->next=p;//插入到表尾

r=p;//r指向新的尾结点

}

}

intListEmpty(LinkListL)//若L为空表,则返回1,否则返回0

{

if(L->next)//非空

return0;

else

return1;

}

StatusDispList_L(LinkListL)

{

LinkListp;

if(ListEmpty(L))

returnERROR;

else

{

p=L->next;

while(p)

{

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

p=p->next;

}

printf("\n");

}

}

voidDelete_maxmin(LinkList&L,intmink,intmaxk)

{LinkListp,q,pre,s;

pre=L;

p=L->next;//首元结点

while(p&&p->data<=mink)

{

pre=p;

p=p->next;

}//查找第一个值>mink的结点

if(p)

{

while(p&&p->data

p=p->next;//查找第一个值≥maxk的结点

q=pre->next;

pre->next=p;//修改指针

while(q!

=p)

{

s=q->next;

deleteq;

q=s;

}//释放结点空间

}

}

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2