线性表的顺序存储结构实验报告Word文档格式.docx

上传人:b****6 文档编号:18808550 上传时间:2023-01-01 格式:DOCX 页数:11 大小:23.63KB
下载 相关 举报
线性表的顺序存储结构实验报告Word文档格式.docx_第1页
第1页 / 共11页
线性表的顺序存储结构实验报告Word文档格式.docx_第2页
第2页 / 共11页
线性表的顺序存储结构实验报告Word文档格式.docx_第3页
第3页 / 共11页
线性表的顺序存储结构实验报告Word文档格式.docx_第4页
第4页 / 共11页
线性表的顺序存储结构实验报告Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

线性表的顺序存储结构实验报告Word文档格式.docx

《线性表的顺序存储结构实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《线性表的顺序存储结构实验报告Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

线性表的顺序存储结构实验报告Word文档格式.docx

操作结果:

构造一个空的线性表L。

InputList(List*L)

初始条件:

线性表L已经存在

人工输入了一张表。

CheckList(List*L)

判断L是否非递增有序,若为否,则重新输入。

MergeList(List*La,List*Lb,List*Lc)

非递增线性表La,Lb已经存在

合并La,Lb得到Lc,Lc仍按非递增有序排列。

DeleteSame(List*L)

非递增线性表L已经存在

删除了L中值相同的元素。

PrintList(ListL)

打印出表L。

}ADTList

2.本程序有三个模块:

⑴主程序模块

voidmain(){

初始化;

do{

接受命令;

显示结果;

}while(执行完毕)

⑵线性表单元模块:

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

⑶结点结构单元模块:

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

三、详细设计

⒈元素类型,结点类型

typedefintElemType;

//元素类型

structLIST{

ElemType*elem;

intlength;

intlistsize;

};

typedefstructLISTlist;

//结点类型

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

intinit(List*L)

{//初始化表L

L→elem=(ElemType*)malloc(sizeof(ElemType)*LIST_INIT_SIZE);

//为线性表顺序结构分配空间

If(!

L→elem)exit(ERROR);

L→length=0;

L→listsize=LIST_INIT_SIZE;

ReturnOK;

}//initList

voidInputList(List*L)

{//构造表L

intflag=-32768;

//输入结束的标志

scanf("

%d"

&

n);

//输入元素

while(n!

=flag)

{//继续输入

L→elem[j++]=n;

L→length=j;

Scanf("

}

}//InputList

voidCheckList(List*L)

{

for(i=0;

i<

L→length-1;

i++)

{

if(L→elem[i]<

L→elem[i+1])

InputList(L);

//输入为递增时,要重新输入

i=0;

}//CheckList

voidMergeList(List*La,List*Lb,List*Lc)

{//表La和Lb合并为Lc

Pa=La→elem;

pb=Lb→elem;

//pa,pb分别指向La,Lb的第一个元素

Lc→Listsize=La→length+Lb→length;

Lc→elem==(ElemType*)malloc(Lc→listsize*sizeof(ElemType));

pc=Lc→elem;

//pc指向表Lc的第一个元素

pa_last=La→elem+La→length-1;

//表La最后一个元素的地址

pb_last=Lb→elem+Lb→length-1;

//表Lb最后一个元素的地址

while(pa<

=pa_last&

&

pb<

=pb_last)

{//表La,Lb都未操作完时

if(*pa<

=*pb)*pc++=*pb++;

else*pc++=*pa++;

}

while(pa<

=pa_last)*pc++=*pa++;

//将La的剩余部分接到Lc

while(pb<

=pb_last)*pc++=*pb++;

//将Lb的剩余部分接到Lc

}//MergeList

voidDeleteSame(List*L)

{//删除表中相同的元素

intj=0;

for(i=1;

=L→length-1;

if(L→elem[i]!

=L→elem[j])L→elem[++j]=L→elem[i];

//前后不等时i,j均往后移。

L→length=++j;

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

voidmain()

{

Initialization();

//初始化

do{

input(ListL);

//输入一个线性表L

Operate(ListL);

//对表进行操作

}while(未执行DeleteSame)

}//main

voidInitialization()

clrscr();

//清屏

屏幕出现提示信息;

nowinputthelistofA:

}//Initialization

voidInput(ListL)

{//输入线性表L

do{L=getch();

while(L!

=-32768);

}//Input

voidOperate(ListL)

{//对刚输入的表L进行操作

do{CheckList(La);

InputList(La);

while(La不是非递增有序的);

printlist(La);

while(Lb不是非递增有序的);

printlist(Lb);

MergeList(La,Lb,Lc);

DeleteSame(Lc);

printlist(Lc);

4函数调用关系

main

 

InitializationOperateListInput

DeleteSameprintlistMergeListCheckListInputList

四、调试分析

⒈由于对指针部分的C语言成分有所淡忘,导致一些变量的"

"

,"

*"

使用混乱,使调试费时不少。

比如MergeList函数中有if(*pa<

=*pb),一开始写成了if(pa<

=pb),结束程序运行结果不正确。

⒉输入时,元素间隔应为空格。

一开始调试用的是"

,使程序无法运行。

因此应注意输入的格式。

3.本程序模块划分合格,使各部分基本独立,因而具有较高的可重用性。

4.算法的时空分析

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

其中init为O

(1),InputList,CheckList,MergeList,DeleteSame,printlist为O(n)。

5.本次实验采用数据抽象的程序设计方法,将程序化为三层次结构:

元素结点、线性顺序表、主控模块,使得设计时思路清晰,使调试也较顺利,各模块有较好的可重用性,受到了一次良好的程序设计训练。

五、用户手册

⒈本程序的运行环境为windows98操作系统,执行文件为Exp1Wsh2.c;

⒉进入演示程序后,完成编译,连接(即同时按下CtrlF9)进入演示界面:

根据提示信息,用户输入数据(整型),以-32768为输入结束的标志。

4.输入完毕(两张表)后,用户只需键入回车键,就能观看操作结果了。

六、测试结果

(1)同时键入CtrlF9,进入用户界面,屏幕上出现:

NowinputthelistofA:

(2)输入:

1__2__3__-32768,键入回车键,屏幕上出现:

Yourinputiswrong.Pleasetryagain:

(3)输入:

9__5__0__-2__-32768,回车,出现:

950-2

回车,出现:

NowinputtheListofB:

(4)输入:

10__5__0__-1__-3__-5__-10,回车,出现:

1050-1-3-5-10

(5)回车,出现:

NowmergetheListAandB:

1095500-1-2-3-5-10

(6)回车,出现:

NowdeletethesameelementsinListC:

10950-1-2-3-5-10

(7)回车,退出用户界面,返回编辑状态。

七、附录:

源程序

//------头文件

#include<

stdio.h>

malloc.h>

conio.h>

//符号常量

#defineERRORO

#defineOK1

#defineOVERFLOW-1

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

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

//类型声明

typedefstructLIST{

intlength;

intlistsize;

}List;

intinit(List*L);

//初始化,创建一张空表

voidInputList(List*L);

//人工输入一张表L

voidCheckList(List*L);

//检验表L是否是非递增有序的

voidMergeList(List*La,List*Lb,List*Lc);

//合并La,Lb,用Lc存储

voidDeleteSame(List*L);

//删除L中值相同的元素

voidprintlist(List*L);

//打印表L

main()

ListLa,Lb,Lc;

//定义结构体变量,即表La,Lb,Lc

init(&

La);

init(&

Lb);

Lc);

printf("

NowpleaseinputtheListofA:

\n"

);

InputList(&

CheckList(&

printf("

\n"

printlist(&

getch();

NowpleaseinputtheListofB:

NowMergetheListofAandB:

MergeList(&

La,&

Lb,&

\n\n"

NowdeletethesameelementsinListC:

\n\n"

DeleteSame(&

{//构造一个空的线性表

L->

elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!

elem)exit(OVERFLOW);

//存储分配失败

length=0;

//空表长度为0

listsize=LIST_INIT_SIZE;

//初始存储容量

returnOK;

intn,j=0;

//输入结束标志

%d"

L->

elem[j++]=n;

length=j;

scanf("

inti;

for(i=0;

length-1;

if(L->

elem[i]<

elem[i+1])

{printf("

Yourinputiswrong.Pleasetryagain:

InputList(L);

//重新输入表L

}

voidMergeList(List*La,List*Lb,List*Lc)

ElemType*pa,*pb,*pc,*pa_last,*pb_last;

pa=La->

elem;

pb=Lb->

Lc->

length=La->

length+Lb->

length;

listsize=La->

elem=(ElemType*)malloc(Lc->

listsize*sizeof(ElemType));

pc=Lc->

pa_last=La->

elem+La->

//La最后一个元素的地址

pb_last=Lb->

elem+Lb->

//Lb最后一个元素的地址

while(pa<

{//表La,Lb都还未操作完时

if(*pa<

//将较大者插入Lc中,从而Lc为非递增有序

else*pc++=*pa++;

//插入La的剩余元素

//插入Lb的剩余元素

inti,j=0;

for(i=1;

=L->

if(L->

elem[i]!

elem[j])

L->

elem[++j]=L->

elem[i];

L->

length=++j;

voidprintlist(List*L)

{//输入表L

%d\t"

L->

elem[i]);

THANKS!

!

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

打造全网一站式需求

欢迎您的下载,资料仅供参考

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

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

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

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