线性表的顺序存储结构

发布 2021-06-02 08:05:28 阅读 8696

南昌航空大学实验报告(用实验报告纸,手写)

课程名称: 数据结构实验名称: 实验一线性表的顺序存储结构

班级学生姓名: visual逆学号:

指导教师评定签名。

原题目:有两张非递减有序的线性学生表a,b,采用顺序存储结构,两张表合并用c表存,要求c仍为非递减有序的,并删除c中值相同的表。

本次实验题目:用户任意给两张线性表输入整数数据,按从小到大排列后输出两表,并且按从小到大排列合成(不考虑数据重复)c表,输出c表,再删除c表中相同的数据,输出c表。

一、需求分析。

本实验程序在输入数据时默认输入0结束。

在演示过程序中,用户敲击键盘,即可**演示结果。

程序执行的命令包括:

(1)构造线性表a (2)构造线性表b (3)求两张表的并 (4)删除c中值相同的元素。

二、概要设计。

1. 本程序有三个模块:

主程序模块。

void main();

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

void cj(l *w)

w->head=(int *)malloc(sizeof(int)*max);

w->length=0;w->size=100;

//初始化表,分配空间。

void copy(l *a,l *b,l *c)//将合成c表。

int *p,*q,*r;

p=a->head;

q=b->head;

r=c->head;

c->length=a->length+b->length;

int j=1 ,k=1;

while(j<=a->length&&k<=b->length)

if(k<=b->length)

for(;k<=b->length;)

p->length--;

else

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

void main()

l a,b,c;

l*a=&a,*b=&b,*c=&c;

cj(a);

cj(b);

cj(c);

printf("输入a表数据:");

input(a);

paixu(a);

output(a);

printf("输入b表数据:");

input(b);

paixu(b);

output(b);

printf("按任意键合并两表生成c表:");

getch();

copy(a,b,c);

output(c);

printf("按任意键删除c表相同数据:");

getch();

sc(c);

output(c);

printf("任务完成。");

void output(l *x)//打印表。

int *p;

p=x->head;

int i;

printf("数据个数为:%-3d|数据:",x->length);

for(i=1;i<=x->length;i++)

printf("");

4 函数调用关系。

maininitialization makelistoperatelist readcommand printlist

unionlist mergelist

less_equallist

init listinsert locateelem

equallist

四、调试分析。

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

程序采用逐个输入的方法创建la,lb,在元素较多时,会使得程序很庞大,不利于检查错误等。

算法的时空分析。

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

init,listlength,getelem,equallist,less_equallist为o(1)

locateelem,listinsert,printlist为o(n),unionlist为o(mn),mergelist为o(n)。

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

五、用户手册。

本程序的运行环境为windows xp/7操作系统,可运行软件:microsoft visual c++。

进入演示程序后,完成编译,连接(即同时按下ctrl f9)进入界面,用户按提示完成演示过程。

六、测试结果。

演示为:输入a表数据:

输入数字(0结束):1 2 4 6 8 9 0 回车。

数据个数为:6 数据: 1 2 4 6 8 9

输入b表数据:

输入数字(0结束):1 2 3 4 5 6 7 8 9 0 回车。

数据个数为:9 数据:1 2 3 4 5 6 7 8 9

按任意键合并两表生成c表:

数据个数为: 15 数据: 1 1 2 2 3 4 4 5 6 6 7 8 8 9

按任意键删除c表中相同数据:

数据个数为:10 数据:1 2 3 4 5 6 7 8 9

任务完成。七、附录:题一源程序。

#include ""

#include <>

#include ""

struct l

int *head;

int length;

int size;

#define max 100

void paixu(l *a)

int i,j,d;

int *p=a->head;

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

void input(l *p)

int *q;

int i=0;

int num;

q=p->head;

printf("输入数字(0结束):"

while(1)

p->length=i;

void copy(l *a,l *b,l *c)

int *p,*q,*r;

p=a->head;

q=b->head;

r=c->head;

c->length=a->length+b->length;

int j=1 ,k=1;

while(j<=a->length&&k<=b->length)

if(k<=b->length)

for(;k<=b->length;)

线性表的顺序存储结构

关于线性表的顺序存储结构的表示和实现,基本操作是创建 插入 删除 求某个元素及它的前趋后继 显示等操作。include include include define true 1 define false 0 define ok 1 define error 0 define overflow 2 ...

线性表顺序存储结构上的基本运算

实验项目名称 线性表的顺序存储结构上的基本运算。所属课程 数据结构 用c语言描述。院系 计算机科学与信息工程学院专业班级 网络工程姓名 000000学号 0000000000 实验日期 2016.10.20实验地点 a 06 406合作者指导教师 孙高飞。本实验项目成绩教师签字日期。以下为实验报告正...

实验一顺序结构线性表的实现

一 目的 掌握顺序表的表示方法,存储结构及其基本操作的实现。二 要求 建立一顺序表,实现其基本操作。三 实验内容。1 编写程序,实现顺序表的基本操作 2 在第1步的基础上实现下列功能。1 将顺序表的ai元素删除 i为 的倍数 2 判断该顺序表中元素是否对称,对称返回1,否则返回0。3 实现把该表中所...