数据结构实验一 线性表的顺序存储结构和链式存储结构.docx

上传人:b****6 文档编号:3038549 上传时间:2022-11-17 格式:DOCX 页数:12 大小:91.31KB
下载 相关 举报
数据结构实验一 线性表的顺序存储结构和链式存储结构.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

数据结构实验一线性表的顺序存储结构和链式存储结构

中山大学新华学院实验报告

课程名称:

数据结构实验名称:

实验一线性表的顺序存储结构和链式存储结构

班级:

09级计算机学生姓名:

郑永坤学号:

********

指导教师评定:

签名:

题目:

利用线性表的顺序存储结构和链式存储结构分别存储数据并把数据输出。

一、需求分析

⒈本演示程序分别用顺序存储结构和链式存储结构存储数据并把数据输出。

⒉在演示过程序中,用户敲击键盘,输入数据存储,即可看到数据的输出。

⒊程序执行的命令包括:

(1)定义结构体

(2)建立空表(3)构造输入数据的函数(4)构造输出数据的函数

二、概要设计

⒈为实现上述算法,需要线性表的抽象数据类型:

顺序存储结构的抽象数据类型:

ADTSqList{

数据对象:

D={ai:

|ai∈ElemSet,i=1…n,n≥0}

数据关系:

R1={|ai-1,ai∈D,i=2,…n≥0}

基本操作:

InitList_Sq(SqList*L)

操作结果:

构造一个空的线性表L。

inputlist(SqList*L)

初始条件:

线性表L已经存在

操作结果:

存储输入的数据元素。

outputlist(SqList*L)

初始条件:

线性表L已经存在

操作结果:

输出表L。

}ADTSqList

链式存储结构的抽象数据类型:

ADTlinklist{

数据对象:

D={ai:

|ai∈ElemSet,i=1…n,n≥0}

数据关系:

R1={|ai-1,ai∈D,i=2,…n≥0}

基本操作:

linklist*creatL(linklist*L)

初始条件:

线性表L已经存在

操作结果:

存储输入的数据元素。

output(linklist*L)

初始条件:

线性表L已经存在

操作结果:

输出表L。

}ADTlinklist

2.本程序有三个模块:

⑴主程序模块

voidmain(){

初始化;

{

接受命令;

显示结果;

⑵线性表单元模块:

实现线性表抽象数据类型;

⑶结点结构单元模块:

定义线性表中的结点结构。

三、详细设计

⒈结点类型

顺序存储结构的结点类型:

typedefstruct{

ElemType*elem;//存储空间基址

intlength;//当前长度

intlistsize;//当前分配的存储容量(以size(ElemType)为单位)

}SqList;

链式存储结构的结点类型:

typedefstructLnode

{

intscore;

structLnode*next;

}linklist;//定义一个节点

2.对抽象数据类型中的部分基本操作的伪码算法如下:

顺序存储结构:

intInitList_Sq(SqList*L){//建立一个空的线性表

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!

L->elem)exit(OVERFLOW);

L->length=0;

L->listsize=LIST_INIT_SIZE;

returnOK;

}

intinputlist(SqList*L)//输入线性表内容

{

inti,*p;

p=L->elem;

printf("请输入要存储元素的个数:

");

scanf("%d",&L->length);

printf("\n");

printf("请输入存储元素值:

");

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

scanf("%d",(p+i));

return1;

}

intoutputlist(SqList*L)//输出线性表内容

{

inti,*p;

p=L->elem;

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

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

return1;

}

链式存储结构:

linklist*creatL(linklist*L)

{//建立一个单链表

linklist*p,*q;

intelem,flag=1;

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

if(!

L)

{

printf("分配空间失败");

returnERROR;//分配空间失败

}

L->next=NULL;

p=L;

while(flag)

{

printf("请输入元素(输入0结束输入):

");

scanf("%d",&elem);

if(elem!

=0)

{

q=(linklist*)malloc(sizeof(Lnode));

if(!

q)returnERROR;//分配空间失败

q->score=elem;

p->next=q;

p=q;

p->next=NULL;

}

else

flag=0;

}

return(L);

}

voidoutput(linklist*L)

{//按顺序输出元素

linklist*p;

p=L->next;

printf("链表元素依次为\n");

while(p)

{

printf("%-5d",p->score);

p=p->next;

}

printf("\n");

}

3.主函数和其他函数的伪码算法

顺序存储机构:

intmain()

{

SqListLa;

InitList_Sq(&La);//创建一个新表La

inputlist(&La);//输入数据元素

outputlist(&La);//输出数据元素

return0;

}

链式存储结构:

voidmain()

{

linklist*L=NULL;

L=creatL(L);

output(L);//按顺序输出元素

}

4函数调用关系

顺序存储结构:

链式存储结构:

四、调试分析

⒈刚开始输入时,漏掉了一些变量参数的标记"&",有的则错加了"&",使得程序运行出来的结果不正确,使调试程序时费时不少。

⒉一开始不知道怎么构造输出数据的函数,后来想到了结构数组,顺利写出输出函数。

⒊算法的时空分析

各操作的算法时间复杂度比较合理

InitList_Sq为O

(1)

Inputlist,outputlist,creatL,output为O(n)。

4.本次实验采用数据抽象的程序设计方法,将程序化为三层次结构,设计时思路清晰,使调试也较顺利,各模块有较好的可重用性。

五、用户手册

⒈本程序的运行环境为windowsxp操作系统,执行文件为顺序存储.c和链式存储.c;

⒉进入演示程序后,完成编译,连接(即按下CtrlF5)进入演示界面,用户键入线性表的数据元素。

六、测试结果

顺序存储:

(1)键入CtrlF5,演示为:

(2)键入元素个数,演示为:

(3)键入任意数据,演示为:

(5)按回车,退出演示界面,回到编辑状态。

链式存储:

(1)键入CtrlF5,演示为:

(2)键入任意数据,演示为:

(5)按回车,退出演示界面,回到编辑状态。

七、附录:

题一源程序

顺序结构存储源程序:

#include

#include

#include

#include

#defineLIST_INIT_SIZE100//线性表存储空间的初始分配增量

#defineLISTINCREMENT100//线性表存储空间的分配增量

#defineOK1

#defineOVERFLOW-1

#defineElemTypeint

typedefstruct{

ElemType*elem;//存储空间基址

intlength;//当前长度

intlistsize;//当前分配的存储容量(以size(ElemType)为单位)

}SqList;

intInitList_Sq(SqList*L){

//构造一个空的线性表L。

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!

L->elem)exit(OVERFLOW);//存储分配失败

L->length=0;//空间长度为0

L->listsize=LIST_INIT_SIZE;//初始存储容量

returnOK;

}

intinputlist(SqList*L)//输入线性表内容

{

inti,*p;

p=L->elem;

printf("请输入要存储元素的个数:

");

scanf("%d",&L->length);

printf("\n");

printf("请输入存储元素值:

");

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

scanf("%d",(p+i));

return1;

}

intoutputlist(SqList*L)//输入线性表内容

{

inti,*p;

p=L->elem;

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

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

return1;

}

intmain()

{

SqListLa;

InitList_Sq(&La);//创建一个新表La

inputlist(&La);//输入线性表元素

outputlist(&La);//输出线性表

return0;

}

链式结构存储源程序:

#include

#include

#defineOK1

#defineERROR0

typedefstructLnode

{

intscore;

structLnode*next;

}linklist;//定义一个节点

linklist*creatL(linklist*L)

{//建立一个单链表

linklist*p,*q;

intelem,flag=1;

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

if(!

L)

{

printf("分配空间失败");

returnERROR;//分配空间失败

}

L->next=NULL;

p=L;

while(flag)

{

printf("请输入元素(输入0结束输入):

");

scanf("%d",&elem);

if(elem!

=0)

{

q=(linklist*)malloc(sizeof(Lnode));

if(!

q)returnERROR;//分配空间失败

q->score=elem;

p->next=q;

p=q;

p->next=NULL;

}

else

flag=0;

}

return(L);

}

voidoutput(linklist*L)

{//按顺序输出元素

linklist*p;

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

当前位置:首页 > PPT模板 > 中国风

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

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