顺序表和单链表实验报告.docx

上传人:b****6 文档编号:5821096 上传时间:2023-01-01 格式:DOCX 页数:12 大小:158.19KB
下载 相关 举报
顺序表和单链表实验报告.docx_第1页
第1页 / 共12页
顺序表和单链表实验报告.docx_第2页
第2页 / 共12页
顺序表和单链表实验报告.docx_第3页
第3页 / 共12页
顺序表和单链表实验报告.docx_第4页
第4页 / 共12页
顺序表和单链表实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

顺序表和单链表实验报告.docx

《顺序表和单链表实验报告.docx》由会员分享,可在线阅读,更多相关《顺序表和单链表实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

顺序表和单链表实验报告.docx

顺序表和单链表实验报告

 

数据结构实验报告

 

一、顺序表操作验证

1.实验目的

⑴掌握线性表的顺序存储结构;

⑵验证顺序表及其基本操作的实现;

⑶掌握数据结构及算法的程序实现的基本方法。

2.实验内容

⑴建立含有若干个元素的顺序表;

⑵对已建立的顺序表实现插入、删除、查找等基本操作。

3.设计与编码

#include

#include

#include

structLinearList

{

int*list;

intsize;

intMaxSize;

};

typedefstructLinearListLIST;

voidInitList(LIST*L,intms)

{

if((L->list=(int*)malloc(ms*sizeof(int)))==NULL){

printf("内存申请错误!

\n");

exit

(1);

}

L->size=0;

L->MaxSize=ms;

}

 

intInsertList(LIST*L,intitem,intrc)

{

inti;

if(L->size>=L->MaxSize)

return-1;

if(rc<0)

rc=0;

if(rc>L->size)

rc=L->size;

for(i=L->size-1;i>=rc;i--)

L->list[i+1]=L->list[i];

L->list[rc]=item;

L->size++;

return0;

}

voidOutputList(LIST*L)

{

inti;

for(i=0;isize;i++)

printf("%d",L->list[i]);

printf("\n");

}

intFindList(LIST*L,intitem)

{

inti;

for(i=0;isize;i++)

if(item==L->list[i])

returni;

return-1;

}

intDeleteList1(LIST*L,intitem)

{

inti,n;

for(i=0;isize;i++)

if(item==L->list[i])

break;

if(isize){

for(n=i;nsize-1;n++)

L->list[n]=L->list[n+1];

L->size--;

returni;

}

return-1;

}

intDeleteList2(LIST*L,intrc)

{

inti,n;

if(rc<0||rc>=L->size)

return-1;

for(n=rc;nsize-1;n++)

L->list[n]=L->list[n+1];

L->size--;

return0;

}

 

voidmain()

{

LISTLL;

inti,r;

printf("listaddr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize);

InitList(&LL,100);

printf("listaddr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize);

while

(1)

{

printf("请输入元素值,输入0结束插入操作:

");

fflush(stdin);

scanf("%d",&i);

if(i==0)

break;

printf("请输入插入位置:

");

scanf("%d",&r);

InsertList(&LL,i,r-1);

printf("线性表为:

");

OutputList(&LL);

}

while

(1)

{

printf("请输入查找元素值,输入0结束查找操作:

");

fflush(stdin);

scanf("%d",&i);

if(i==0)

break;

r=FindList(&LL,i);

if(r<0)

printf("没找到\n");

else

printf("有符合条件的元素,位置为:

%d\n",r+1);

}

while

(1)

{

printf("请输入删除元素值,输入0结束查找操作:

");

fflush(stdin);

scanf("%d",&i);

if(i==0)

break;

r=DeleteList1(&LL,i);

if(r<0)

printf("没找到\n");

else{

printf("有符合条件的元素,位置为:

%d\n线性表为:

",r+1);

OutputList(&LL);

}

}

while

(1)

{

printf("请输入删除元素位置,输入0结束查找操作:

");

fflush(stdin);

scanf("%d",&r);

if(r==0)

break;

i=DeleteList2(&LL,r-1);

if(i<0)

printf("位置越界\n");

else{

printf("线性表为:

");

OutputList(&LL);

}

}

}

4.运行结果

 

二、单链表操作验证

1.实验目的

⑴掌握线性表的链式存储结构;

⑵验证单链序表及其基本操作的实现;

⑶进一步掌握数据结构及算法的程序实现的基本方法。

2.实验内容

⑴用头插法(或尾插法)建立带头结点的单链表;

⑵对已建立的单链表实现插入、删除、查找等基本操作。

3.设计与编码

#include

#include

typedefstructlist

{

intdata;

structlist*next;

}LIST;

voidInitList(LIST**p)

{

*p=NULL;

}

voidInsertList1(LIST**p,intitem,intrc)

{

inti;

LIST*u,*q,*r;

u=(LIST*)malloc(sizeof(LIST));

u->data=item;

for(i=0,r=*p;i

=NULL;i++){

q=r;

r=r->next;

}

if(r==*p)

*p=u;

else

q->next=u;

u->next=r;

}

voidInsertList2(LIST**p,intitem)

{

LIST*u,*q,*r;

u=(LIST*)malloc(sizeof(LIST));

u->data=item;

for(r=*p;r!

=NULL&&r->datanext);

if(r==*p)

*p=u;

else

q->next=u;

u->next=r;

}

intDeleteList(LIST**p,intitem)

{

LIST*q,*r;

q=*p;r=q;

if(q==NULL)

return1;

if(q->data==item){

*p=q->next;

free(r);

return0;

}

for(;q->data!

=item&&q->next!

=NULL;r=q,q=q->next);

if(q->data==item){

r->next=q->next;

free(q);

return0;

}

return1;

}

intFindList(LIST*p,intitem)

{

inti;

for(i=1;p->data!

=item&&p!

=NULL;p=p->next,i++);

return(p==NULL)?

-1:

i;

}

voidOutputList(LIST*p)

{

while(p!

=NULL){

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

p=p->next;

}

printf("\n");

}

voidFreeList(LIST**p)

{

LIST*q,*r;

for(q=*p;q!

=NULL;){

r=q;

q=q->next;

free(r);

}

*p=NULL;

}

intmain()

{

LIST*p;

intop,i,rc;

InitList(&p);

while

(1)

{

printf("请选择操作1:

指定位置追加2:

升序追加3:

查找结点\n");

printf("4:

删除结点5:

输出结点6:

清空链表0:

退出\n");

fflush(stdin);

scanf("%d",&op);

switch(op){

case0:

return-1;

case1:

printf("请输入新增结点键值和位置:

");

scanf("%d%d",&i,&rc);

InsertList1(&p,i,rc);

break;

case2:

printf("请输入新增结点键值:

");

scanf("%d",&i);

InsertList2(&p,i);

break;

case3:

printf("请输入要查找结点的键值:

");

scanf("%d",&i);

rc=FindList(p,i);

if(rc>0)

printf("位置为[%d]\n",rc);

else

printf("没找到\n");

break;

case4:

printf("请输入要删除结点的键值:

");

scanf("%d",&i);

rc=DeleteList(&p,i);

if(rc==0)

printf("删除成功\n",rc);

else

printf("没找到\n");

break;

case5:

printf("链表内容为:

");

OutputList(p);

break;

case6:

FreeList(&p);

break;

}

}

}

4.运行结果

三、心得体会

在本次实验中,让我对线性表和链表有了充分的理解,也对数据结构这门课程有了进一步的理解。

同时,我也认识到了c语言的确是编程的基础,希望自己把基础加以巩固。

调试过程中总是遇到一些小问题,如漏了分号,还有就是不知一些代码如何写,通过看书和上网查资料解决了。

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

当前位置:首页 > 经管营销

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

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