1、学数据结构课程实验报告实 验 名 称: 线性表基本操作的实现 实验室(中心): 学 生 信 息: 专 业 班 级: 指 导 教 师 : 实验完成时间: 2016 教师评阅意见:签名: 年 月 日实验成绩:章: 线性表提升实验2实验一 线性表基本操作的实现一、实验目的1.熟悉 C语言的上机环境,进一步掌握 C语言的结构特点。2.掌握线性表的顺序存储结构的定义及 C语言实现。3.掌握线性表的链式存储结构单链表的定义及 C语言实现。4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。5.掌握线性表在链式存储结构单链表中的各种基本操作。二、实验内容及要求1.顺序线性表的建立、插入、删除及合并。2.链
2、式线性表的建立、插入、删除及连接。三、实验设备及软件计算机、Microsoft Visual C+ 6.0 软件四、设计方案(算法设计) 采用的数据结构本程序顺序表的数据逻辑结构为线性结构,存储结构为顺序存储;链表的数据逻辑结构依然为线性结构,存储结构为链式结构。 设计的主要思路1.建立含 n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度,顺序表的长度和元素由用户输入;2.利用前面建立的顺序表,对顺序表进行插入、删除及合并操作;3.建立一个带头结点的单链表,结点的值域为整型数据,链表的元素由用户输入;章: 线性表提升实验34.对前面建立的链表进行插入、删除及连个链表的连接操作; 算法描
3、述1、顺序表void Init(sqlist /初始化顺序表BOOL Inse(sqlist /在线性表中插入元素BOOL del(sqlist /在线性表中删除元素int Loc(sqlist,char); /在线性表中定位元素void print(sqlist); /输出顺序表void combine( sqlist /两个线性表的合并2、链表void CreaL(LinkList /生成一个单链表BOOL LInsert(LinkList /在单链表中插入一个元素BOOL LDele(LinkList /在单链表中删除一个元素BOOL LFind_key(LinkList,char,in
4、t /按关键字查找一个元素BOOL LFind_order(LinkList,char /按序号查找一个元素void LPrint(LinkList); /显示单链表所有元素void LUnion(LinkList /两个链表的连接五、程序代码1、顺序表#include 章: 线性表提升实验4#include #define Max 116enum BOOLFalse,True;typedef structchar elemMax; /线性表int last; /last 指示当前线性表的长度sqlist;void Init(sqlist BOOL Inse(sqlist /在线性表中插入元素
5、BOOL del(sqlist /在线性表中删除元素int Loc(sqlist,char); /在线性表中定位元素void print(sqlist); void combine( sqlist void main()sqlist L1;sqlist L2;sqlist L3;int loc,S=1;char j,ch;BOOL temp;printf(“本程序用来实现顺序结构的线性表。n“);printf(“可以实现查找、插入、删除、两个线性表的合并等操作。n“);Init(L1); 章: 线性表提升实验5while(S)printf(“n 请选择:n“);printf(“1.显示所有元素
6、n“);printf(“2.插入一个元素n“);printf(“3.删除一个元素n“);printf(“4.查找一个元素n“);printf(“5.线性表的合并n“);printf(“6.退出程序nn“);scanf(“ %c“,switch(j)case 1:print(L1); break; case 2:printf(“请输入要插入的元素(一个字符)和插入位置:n“);printf(“格式:字符,位置;例如:a,2n“);scanf(“%c,%d“, temp=Inse(L1,loc,ch); if(temp=False) printf(“插入失败!n“); else printf(“插
7、入成功!n“); print(L1);break;case 3:printf(“请输入要删除元素的位置:“);scanf(“%d“, temp=del(L1,loc,ch); if(temp=True) printf(“删除了一个元素:%cn“,ch); 章: 线性表提升实验6else printf(“该元素不存在 !n“); printf(“删除该元素后的线性表为:“);print(L1);break;case 4:printf(“请输入要查找的元素:“);scanf(“ %c“, loc=Loc(L1,ch); if(loc!=-1) printf(“该元素所在位置:%dn“,loc+1)
8、; else printf(“%c 不存在!n“,ch);break;case 5:printf(“请输入要进行合并的第二个线性表:“);Init(L2);combine(L1,L2,L3);printf(“合并前的两个线性表如下:n“);print(L1);print(L2);printf(“输出合并后的线性表如下:n“);print(L3);break;default:S=0;printf(“程序结束,按任意键退出!n“);getch();章: 线性表提升实验7void Init(sqlist printf(“请输入初始线性表长度:n=“); scanf(“%d“,printf(“请输入从
9、 1 到%d 的各元素(字符),例如:abcdefgn“,v.last);getchar();for(i=0;iv.last+1)printf(“插入位置不合理!n“); return False;else if(v.last=Max) printf(“线性表已满!n“);return False;else for(i=v.last-1;i=loc-1;i-) 章: 线性表提升实验8v.elemi+1=v.elemi;v.elemloc-1=ch; v.last+; return True;BOOL del(sqlist if(locv.last) return False;else ch=v
10、.elemloc-1; for(j=loc-1;jv.last-1;j+) v.elemj=v.elemj+1; v.last-; return True;int Loc(sqlist v,char ch)/在线性表中查找 ch 的位置,成功返回其位置,失败返回-1int i=0;while(iv.last 章: 线性表提升实验9if(v.elemi=ch) return i;else return(-1);void print(sqlist v) /显示当前线性表所有元素int i;for(i=0;iv.last;i+) printf(“%c “,v.elemi);printf(“n“);void combine( sqlist int j=0 ;int k=0 ;while( i s1.last i+;else章: 线性表提升实验10s3.elemk=s2.elemj;j+;k+;if(i=s1.last)while(js2.last)s3.elemk=s2.elemj;k+;j+;if(j=s2.last)while(is1.last)s3.elemk=s1.elemi;k+;s3.last=k;