数据结构线性表实验报告.docx

上传人:b****9 文档编号:26208558 上传时间:2023-06-17 格式:DOCX 页数:13 大小:28.95KB
下载 相关 举报
数据结构线性表实验报告.docx_第1页
第1页 / 共13页
数据结构线性表实验报告.docx_第2页
第2页 / 共13页
数据结构线性表实验报告.docx_第3页
第3页 / 共13页
数据结构线性表实验报告.docx_第4页
第4页 / 共13页
数据结构线性表实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构线性表实验报告.docx

《数据结构线性表实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构线性表实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构线性表实验报告.docx

数据结构线性表实验报告

实验报告

课程

数据结构

实验名称

实验一线性表

学号

姓名

实验日期:

实验一线性表

实验目的:

1.理解线性表的逻辑结构特性;

2.熟练掌握线性表的顺序存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活

运用;

3.熟练掌握线性表的链表存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活

运用;

4•掌握双向链表和循环链表的的描述方法,以及在该存储结构下的基本操作。

实验原理:

线性表顺序存储结构下的基本算法;

线性表链式存储结构下的基本算法;

实验内容:

2-21设计单循环链表,要求:

(1)单循环链表抽象数据类型包括初始化操作、求数据元素个数操作、插入操作、删

除操作、取消数据元素操作和判非空操作。

(2)设计一个测试主函数,实际运行验证所设计单循环链表的正确性。

2—22.设计一个有序顺序表,要求:

(1)有序顺序表的操作集合有如下操作:

初始化、求数据元素个数、插入、删除和取

数据元素。

有序顺序表与顺序表的主要区别是:

有序顺序表中的数据元素按数据元素值非递减有序。

(2)设计一个测试主函数,实际运行验证所设计有序顺序表的正确性。

(3)设计合并函数ListMerge(L1,L2,L3),功能是把有序顺序表L1和L2中的数据元

素合并到L3,要求L3中的数据元素依然保持有序。

并设计一个主函数,验证该合并函数的正确性。

程序代码:

2-21

(1)头文件LinList.h如下:

typedefstructnode

{

DataTypedata;

structnode*next;

}SLNode;

/*

(1)初始化ListInitiate(SLNode**head)*/

voidListInitiate(SLNode**head)

{/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/

if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit

(1);

(*head)->next=NULL;/*置结束标记NULL*/

}

/*

(2)求当前数据元素个数ListLength(SLNode*head)*/

intListLength(SLNode*head)

{

SLNode*p=head;

intsize=0;

while(p->next!

=head)

{

p=p->next;

size++;

}

returnsize;

}

/*(3)插入ListInsert(SLNode*head,inti,DataTypex)*/

/*在带头结点的单链表的第i(0<=i<=size)个结点前*/

/*插入一个存放数据元素x的结点。

插入成功时返回1,失败返回0*/

intListInsert(SLNode*head,inti,DataTypex){

SLNode*p,*q;

intj;

p=head;

j=-1;

while(p->next!

=head&&j

/*最终让指针指向第i-1个结点*/

{

p=p->next;

j++;

}

if(j!

=i-1)

{

printf("Theinsertedpositioniserror!

");

return0;

}

/*生成新结点由指针q指示*/

if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit

(1);

q->data=x;

q->next=p->next;

p->next=q;

return1;

}

/*(4)删除ListDelete(SLNode*head,inti,DataType*x)*/

/*删除带头结点的单链表head的第i(0<=i<=size)个结点前*/

/*被删除结点的数据元素域由x带回。

删除成功时返回1,失败返回0*/

intListDelete(SLNode*head,inti,DataType*x)

{

SLNode*p,*s;

intj;

p=head;

j=-1;

while(p->next!

=head&&p->next->next!

=head&&j

/*最终让指针指向第i-1个结点*/

{

p=p->next;

j++;

}

if(j!

=i-1)

{

printf("Thedeletedpositionofparameteriserror!

");

return0;

}

s=p->next;/*指针s指指向ai结点*/

*x=s->data;

p->next=p->next->next;/*删除*/

free(s);/*释放指针s所指结点的内存空间*/return1;

}

/*(5)取数据元素ListGet(SLNode*head,inti,DataType*x)*/

intListGet(SLNode*head,inti,DataType*x)

{

SLNode*p;

intj;

p=head;

j=-1;

while(p->next!

=head&&j

{

p=p->next;

j++;

}

if(j!

=i)

{

printf("Thegottenpositionofparameteriserror!

");return0;

}

*x=p->data;

return1;

}

/*(6)撤销单链表Destroy(SLNode**head)*/

voidDestroy(SLNode**head)

SLNode*p,*p1;

p=*head;

while(p!

=NULL)

{

p1=p;

p=p->next;

free(p1);

}

*head=NULL;

}

(2)测试主函数如下:

/*包含printf()函数*/

/*包含exit()函数*/

/*包含malloc()函数*/

/*定义DataType为int*/

/*包含单链表的头文件*/

#include

#include

#include

typedefintDataType;

#include"LinList.h"

voidmain(void)

 

SLNode*head;

inti,x;

/*定义头指针变量*/

ListInitiate(&head);

/*初始化*/

for(i=0;i<10;i++)/*插入10个数据元素*/

{

if(ListInsert(head,i,i+1)==0)

{

printf("error!

\n");

return;

}

}

if(ListDelete(head,4,&x)==0)/*

{

printf("error!

\n");

return;

}

for(i=0;i

删除第四个数据元素*/

/*显示当前数据元素*/

if(ListGet(head,i,&x)==0)

{

/*取数据元素*/

 

printf("error!

\n");

return;

}

/*显示*/

else

printf("%d",x);

/*撤销单链表*/

}

Destroy(&head);

}

2-22设计一个有序顺序表

头文件程序如下:

#defineNULL0

typedefstruct

{

DataTypeList[MaxSize];

intsize;

}SeqList;

/*初始化顺序表L*/

{

returnL.size;

}

intListInsert(SeqList*L,inti,DataTypex)

{

intj;

if(L->size>=MaxSize)

{

printf("顺序表已满无法插入!

\n");

return0;

}

elseif(i<0||i>L->size)

{

printf("参数i不合法!

\n");

return0;

}

else

{

for(j=L->size;j>i;j--)

L->List[j]=L->List[j-1];

L->List[i]=x;

L->size++;

return1;

}

}

intListDelete(SeqList*L,inti,DataType*x)

{

intj;

if(L->size<=0)

{

\n");

printf("顺序表已空无数据元素可删!

return0;

}

elseif(i<0||i>L->size-1)

{

printf("参数i不合法!

\n");

return0;

}

else

{

*x=L->List[i];

for(j=i+1;jsize-1;j++)

L->List[j-1]=L->List[j];

L->size--;

return1;

}

}

intListGet(SeqListL,inti,DataType*x)

{

if(i<0||i>L.size-1)

{

printf("参数i不合法!

\n");

return0;

}

else

{

*x=L.List[i];

return1;

}

}

/*测试主函数设计如下:

*/

#include

#defineMaxSize100

typedefintDataType;

#include"SeqList.h"

intSLOrderInsert(SeqList*L,DataTypex)

{

intj;

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

{

printf("顺序表已满无法插入!

\n");

return0;

}

{

for(j=L->size-1;j>0&&xlist[j];j--)

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

L->list[j+1]=x;

L->size++;

return1;

}

}

voidmain(void)

{

SeqListMyList;

inta[]={1,2,4,5,6,8,9};/*数组a中的数据元素递增有序*/

inti,n=7;

intx;

Listlnitiate(&MyList);for(i=0;i

Listlnitiate(&MyList);

SLOrderlnsert(&MyList,a[i]);

for(i=0;i

{

ListGet(MyList,i,x);

printf("%d",a[i]);

}}

实验结果:

(1

)2—21运行结果如下:

F;\3hujn\rC2\TC-EKE

1

^9

(2)2—22运行结果如下:

总结与思考

(1)在TC2的使用过程中遇到很多问题,路径问题总是导致错误。

有序顺序表的操作集合和线性表的操作集合类似。

(2)带头结点循环链表的操作实现与带头结点的单链表的操作实现方法相似,但也有差别主要在:

1、在初始化函数中,把语句(*head)->next=NULL改为(*head)->next=head。

2、在其它函数中,循环判定条件p->next!

=NULL和p->next->next!

=NULL中的NULL

换成头指针head.

THANKS!

!

!

学习课件等等

致力为企业和个人提供合同协议,策划案计划书,

打造全网一站式需求

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

当前位置:首页 > PPT模板 > 其它模板

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

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