线性表的抽象数据类型的实现实验报告Word文档格式.docx

上传人:b****7 文档编号:22492231 上传时间:2023-02-04 格式:DOCX 页数:20 大小:100.43KB
下载 相关 举报
线性表的抽象数据类型的实现实验报告Word文档格式.docx_第1页
第1页 / 共20页
线性表的抽象数据类型的实现实验报告Word文档格式.docx_第2页
第2页 / 共20页
线性表的抽象数据类型的实现实验报告Word文档格式.docx_第3页
第3页 / 共20页
线性表的抽象数据类型的实现实验报告Word文档格式.docx_第4页
第4页 / 共20页
线性表的抽象数据类型的实现实验报告Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

线性表的抽象数据类型的实现实验报告Word文档格式.docx

《线性表的抽象数据类型的实现实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《线性表的抽象数据类型的实现实验报告Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

线性表的抽象数据类型的实现实验报告Word文档格式.docx

malloc.h>

#definesize20

#defineelemtypeint

structseqlist

{elemtypeelem[size];

intlast;

};

voidmenu()

{printf("

\n.........................................."

);

printf("

\n0.退出操作................................"

\n1.建立数据类型为整形的顺序表(长度小于20)."

\n2.打印线性表.............................."

\n3.在线性表中查找第i个元素,并返回其值....."

\n4.在线性表中第i个元素之前插入一已知元素..."

\n5.在线性表中删除第i个元素................."

\n6.求线性表中所有元素值(整数)之和........"

\n7.初始化..................................\n"

}

voidins(seqlist*L)

{L->

last=-1;

voidcreat(seqlist*L)

{inti=0;

elemtypej;

请输入线性表元素(-1结束):

"

scanf("

%d"

&

j);

while(j!

=-1)

{L->

elem[i++]=j;

L->

last++;

if(i>

size-1)break;

scanf("

}

voidprint(seqlist*L)

{inti;

顺序表中元素为:

for(i=0;

i<

=L->

last;

i++)

printf("

%d\t"

L->

elem[i]);

intfind(seqlist*L,inti)

{if(i<

1||i>

L->

last+1)return0;

elsereturn(L->

elem[i-1]);

intinsert(seqlist*L,inti,intx)

{intj;

if(L->

last+1==size||i<

last+2)return0;

for(j=L->

j>

=i-1;

j--)

L->

elem[j+1]=L->

elem[j];

elem[i-1]=x;

return1;

intdel(seqlist*L,inti)

{inte,j;

last==-1||i<

last+1)

return0;

else

e=L->

elem[i-1];

for(j=i;

j<

last+1;

j++)

elem[j-1]=L->

last--;

intsum(seqlist*L)

{inti=0,s=0;

last==-1)return0;

i++)s+=L->

elem[i];

returns;

intisempty(seqlist*L)

{if(L->

last==-1)

return1;

elsereturn0;

voidmain()

{inti,cz,e;

elemtypedate;

seqlistL;

menu();

请输入你要执行的操作的序号:

i=scanf("

cz);

while

(1)

{if(!

i)printf("

只能输入数值"

elsebreak;

\n再输入一次:

rewind(stdin);

i=scanf("

while(cz)

{switch(cz)

{case1:

if(isempty(&

L))

{ins(&

L);

creat(&

elseprintf("

表已经存在,先清空再进行此操作!

\n"

break;

case2:

printf("

表为空\n"

elseprint(&

case3:

printf("

输入待查找元素的位置:

scanf("

i);

if(find(&

L,i))

查找的第%d个元素为%d\n"

i,find(&

L,i));

else

查找位置错误\n"

case4:

请输入要插入的元素及位置:

date);

if(insert(&

L,i,date))

插入元素成功!

elseprintf("

插入位置不合法或栈已满!

case5:

请输入要删除元素的位置\n"

e=L.elem[i-1];

if(del(&

{printf("

删除第%d个值为%d的元素\n"

i,e);

删除成功\n"

}

Elseprintf("

删除位置不合法或表已空\n"

case6:

表已空!

线性表中所有元素值(整数)和:

%d\n"

sum(&

L));

case7:

ins(&

break;

default:

无此操作!

\n只能输入数值"

测试数据与实验结果

7.初始化

1.建表

2.打印

3.查找

4.插入不合法长度超过20

5.删除然后打印

4~.插入合法

6.求和

二、链表(带头结点)基本操作实验

数据元素类型ElemType取字符型char。

按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):

1创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内;

2打印(遍历)该链表(依次打印出表中元素值);

3在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;

4在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;

5在链表中按照有序方式插入一已知字符元素;

6在线性表中删除第i个结点;

7计算链表的长度。

#include<

#defineelemtypechar

#definesize15

staticintn=0;

typedefstructNode

{

elemtypedata;

structNode*next;

}Node,*linklist;

voidinit(linklist*L)

*L=(linklist)malloc(sizeof(Node));

(*L)->

next=*L;

n=0;

voidcreat(linklistL)

inti=0,j;

Node*s,*r;

elemtypec[size],t;

r=L->

next;

请输入字符型元素(最多15个,输入字符'

@'

结束):

%s"

c);

while(c[i]!

='

{

n++;

i++;

i=0;

n;

for(j=i;

n-i-1;

{

if(c[j]<

c[j+1])

{t=c[j];

c[j]=c[j+1];

c[j+1]=t;

}

t=c[i];

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

s->

data=t;

r->

next=s;

r=s;

voidlength(linklistL)

链表长度为:

n);

voidshow(linklistL)

intj;

Node*p;

p=L;

if(!

p){printf("

表为空!

return;

for(j=0;

%c"

p->

next->

data);

p=p->

intisempty(linklistL)

Node*pre;

pre=L;

if(pre->

next==L)

return0;

voidfind4(linklistL,inti)

intj=0;

if(i<

size)

查找位置错误!

while(j<

i)

j++;

if(i=j)

voidfind5(linklistL,elemtypek)

inti=1,j;

p=L->

if(n==0)

return;

if(p->

data!

=k)

p=p->

else{printf("

第%d个元素是要查找的元素%c"

i,k);

链表中无此字符!

voidinsert(linklistL,elemtypet)

Node*r,*s;

inti=0;

r=L;

if(n==size)

表已满!

for(i;

n-1&

&

t<

r->

data;

r=r->

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

s->

next=r->

r->

插入成功!

n++;

return;

voiddel(linklistL,inti)

Node*p,*r;

n){printf("

删除位置不对!

i-1)

p=p->

开始删除"

r=p->

p->

free(r);

删除成功!

n--;

.........................................................................\n"

0.退出程序...............................................................\n"

1.初始化单循环链表.......................................................\n"

2.创建任意字符型有序(递减排序最长15)单循环链表........................\n"

3.打印(遍历)该链表(依次打印出表中元素值).............................\n"

4.在链表中查找第i个元素..................................................\n"

5.在链表中查找与一已知字符相同的第一个结点...............................\n"

6.在链表中按照有序方式插入一已知字符元素.................................\n"

7.在线性表中删除第i个结点................................................\n"

8.计算链表的长度.........................................................\n"

intcz,i,j,k;

charkey,t;

linklistL;

if(!

else

rewind(stdin);

while(cz)

switch(cz)

case1:

init(&

if(isempty(L))

creat(L);

表已存在,请先初始化单循环链表!

show(L);

请输入查找的第i个元素的i值:

j=scanf("

while

(1)

{

if(!

j)

break;

rewind(stdin);

j=scanf("

find4(L,i);

请输入要查找的字符:

key);

find5(L,key);

请输入要插入的字符:

t);

insert(L,t);

输入要删除的第i个元素的i值:

k);

del(L,k);

case8:

length(L);

menu();

while

(1)

i=scanf("

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

当前位置:首页 > 高等教育 > 文学

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

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