南昌航空大学实验报告(用实验报告纸,手写)
课程名称: 数据结构实验名称: 实验一线性表的顺序存储结构
班级学生姓名: 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 实现把该表中所...