1、数据结构试验报告线性表学院:姓名:学号:时间:专业班级:线性表一、实验目的 1掌握线性结构中顺序表和链表的基本概念、基本操作和应用;2掌握线性表的基本操作:建表、插入、删除、输出等运算在顺序存储结构和链式存储结构上的实现。3 通过本次实习加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用)。熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现。二、实验内容 1编写生成线性表的函数,线性表的元素从键盘输入,分别使用顺序和链式存储结构存储;2编写在线性表中插入一个元素的函数;3编写在线性表中删除一个元素的函数;4编写输出线性表的函数;5编写主函数,调用以上各函数,以便能观
2、察出原线性表以及作了插入或删除后线性表的屏幕输出。三、实验报告要求 1. 画出程序流程图并做简单分析2. 源代码(包括主要结构、主要语句、函数注释说明)3. 运行结果(包括程序如何使用,输入数据和输出结果)4. 实验体会和问题分析四、基本原理 (一) 线性表是最常用的而且也是最简单的一种数据结构,线性表是N个数据元素的有限序列。例如26个英文元素的字母表(A,B,C,D,),其数据结构的描述为:Linear_list=(D,R)其中,D= ai |ai属于ElemSet,i=1,2,3,R=| i=2,3,4, 。本实验是以数组的形式把线性表存放在计算机内存的一个连续的区域内,这样便有:LOC
3、(ai+1)=LOC(ai)+m LOC(ai)=L0+m*(i-1)其中,m是存放每个元素所占的内存字数,L0是a的地址,即首地址。(二) 程序说明 插入一个新元素到第i个位置,既把元素ai向后移一个位置,成为元素ai+1,把新元素放入到第i个位置,其他元素依次后移。插入后的表长是n+1(n是原表长)。修改第i个元素,到第i个位置是把元素ai冲掉后存上新值。删除第i个元素就是把余后的元素依次向前移一个位置。即:以元素ai+1,ai+2,依次取代ai,ai+1,。删除后的表长是n-1(n是原表长)。(三) 线性表链式存储(选作)。五、 实验程序#include#include #define
4、MAXSIZE 20 / 数组最大界限 typedef int ElemType; /数据元素类型 typedef struct ElemType aMAXSIZE; /一维数组子域 int length; /表长度域 SqList; / 顺序存储的结构体类型 SqList a,b,c; void creat_list(SqList *L); void out_list(SqList L); void insert_sq(SqList *L,int i,ElemType e); ElemType delete_sq(SqList *L,int i); int locat_sq(SqList L
5、,ElemType e); /主函数 void main() int i,k,loc;ElemType e,x;char ch;doprintf(nnn);printf(n 1.建立线性表);printf(n 2.插入数据元素);printf(n 3.删除数据元素);printf(n 4.查找数据元素);printf(n 0.结束程序运行);printf(n=);printf(n 请输入你的选择(1,2,3,4,0);scanf(%d,&k);switch(k)case 1:creat_list(&a);out_list(a);break;case 2:printf(n请输入插入位置:);sc
6、anf(%d,&i);printf(n请输入要插入的数据元素值:);scanf(%d,&e);insert_sq(&a,i,e);out_list(a);break;case 3:printf(n请输入删除位置:);scanf(%d,&i);x=delete_sq(&a,i);out_list(a);if(x!=-1)printf(n删除数据元素为:%dn,x);elseprintf(要删除的数据元素不存在!);break;case 4:printf(n请输入要查找的数据元素值:);scanf(%d,&e);loc=locat_sq(a,e);if(loc=-1)printf(n未找到指定数据
7、元素!);elseprintf(n已找到,数据元素位置是%d,loc);break;while(k!=0);printf(n 按回车键,返回.n);ch=getchar();/建立线性表void creat_list(SqList*L)int i; printf(请输入线性表的长度:); scanf(%d,&L-length); for(i=0;ilength;i+) printf(数据元素%d=,i); scanf(%d,&(L-ai); /输出线性表void out_list(SqList*L)int i; for(i=0;ilength-1;i+) printf(%10d,L-ai);
8、/在线性表的第i个位置插入数据元素e void insert_sq(SqList*L,int i,ElemType e) int j;if(iL-length)printf(n输入插入的位置不存在:);for(j=L-length;j=i;j-)L-aj=L-aj-1;L-ai-1=e;L-length+;/删除第i个数据元素,返回其值ElemType delete_sq(SqList*L,int i)int j,y; if(iL-length) return -1; y=L-ai-1; for(j=i;jlength;j+) L-aj-1=L-aj; L-length-;return y;/
9、查找值为e的元素,返回它的值int locat_sq(SqList L,ElemType e)int i=0;while(i=L.length-1&L.ai!=e)i+;if(i=L.length-1)return(i+1);elsereturn(-1);测试结果为:六、 实验体会和问题分析运行结果为:Compiling.线性表.cC:线性表.c(83) : warning C4028: formal parameter 1 different from declarationLinking.线性表.exe - 0 error(s), 0 warning(s)试验调试时会出现少些“;”的情况,今后一定要避免。指导教师评语: 成绩评定:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2