1、数据结构线性表的顺序存储结构C语言实现数学与信息技术学院20162017(下)学年计科专业2015级数据结构实验报告 1 学号:2015201018 姓名:汪继超实验名称线性表的顺序存储结构完成时间实验目的1 掌握线性表的概念,掌握顺序表的概念及其各种运算的原理。2 通过对线性表的查找、插入和删除算法的实现以加深对线性表的顺序存储结构的理解,为加强线性表在实际中的应用打下基础。3 用C语言实现并上机调试通过,认真填写实验报告实验内容1已知某线性表(a1,a2,an)=(1,2,,n),利用C语言编程完成以下操作:(1)定义函数initsq_L():创建该线性表的顺序存储结构;(2)定义函数in
2、sertsq_L():在第I个数据元素前插入X,I和X均用键盘输入;(3)定义函数deletesq_L():将原顺序表中的Ai删除,I由键盘输入;(4)定义函数printsq_L():输出线性表的内容。提示:该线性表的数据可以是一组学生的成绩。实验要求用C语言实现并上机调试通过,认真填写实验报告。掌握线性表的概念,掌握顺序表的概念及其各种运算的原理。实验过程:#include#include#include#include#define LIST_INIT_SIZE 10#define LISTINCREMENT 10typedef int ElemType; typedef struct E
3、lemType *elem; int length; int listsize;SqList; void color(const unsigned short color1)/颜色函数 /*仅限改变0-15的颜色;如果在0-15那么实现他的颜色 因为如果超过15后面的改变的是文本背景色*/ if(color1=0&color1elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);/开辟空间 if(!L-elem) printf(Allocation error.n); exit(0); L-length=0; L-listsize=LIS
4、T_INIT_SIZE; color(13); printf(n表初始化成功!n); color(10); void printsq_L(SqList *L)/输出 int i; for(i=0;ilength;i+) printf(%5d,L-elemi); if(i+1)%10=0) printf(n); printf(n);void deletesq_L(SqList *L,int i)/删除算法操作 int k,j; color(13); printf(n顺序表当前数据:n); printsq_L(L); color(10); printf(请输入删除元素的位置:); scanf(%d
5、,&k); color(13); printf(n顺序表删除元素前:n); printsq_L(L); if(kL-length) exit(1); for(j=k;jlength;j+) L-elemj-1=L-elemj; -L-length; printf(顺序表删除元素后:n); printsq_L(L); color(10); /*int LocateElem_Sq(SqList *L,ElemType e,void(*compare)(ElemType,ElemType) int *p; /在线性表L中查找第一个值与e满足compare()的元素的位序 /若找到,则返回其在L中的位
6、序,否则返回0 int i=1; p=L-elem; while(ilength) & (!(*compare)(*p+,5) +i; if(ilength) return i; else return 0;*/void search_L(SqList *L,ElemType e)/查找操作 int j,flag=0; color(13); printf(n顺序表当前数据:); printsq_L(L); color(10); printf(n请输入要查找的元素:); scanf(%d,&e); color(13); for(j=0;jlength;j+) if(L-elemj=e) flag
7、=1; printf(n找到元素:%d 位置为%d n,L-elemj,j+1); color(10); if(flag=0) printf(n没有找到该元素n); color(10);void modify_L(SqList *L,ElemType e1,ElemType e2) /修改操作 int j,n,flag=0; color(13); printf(n顺序表当前数据:); printsq_L(L); color(10); printf(n请输入要修改的元素:); scanf(%d,&e1); color(13); for(j=0;jlength;j+) if(L-elemj=e1)
8、 flag=1; printf(n找到元素:%d 位置为%d,L-elemj,j+1); printf(nn 1.修改 2.不修改 请输入: ); scanf(%d,&n); if(n!=1) break; if(n=1) printf(n元素%d改为: ,e1); scanf(%d,&e2); L-elemj=e2; printf(n修改成功!n ); printf(n修改后顺序表的数据:); printsq_L(L); break; if(flag=0) printf(n没有找到该元素n);color(10);void insertsq_L(SqList *L,int i,ElemType
9、 e)/插入算法函数 ElemType *newbase; int j; if(iL-length) printf(n插入元素不合法!n); exit(0); if(L-length=L-listsize) /开辟更大的空间 newbase=(ElemType*)realloc(L-elem,(L-listsize+LISTINCREMENT)*sizeof(ElemType); if(!newbase) exit(1); L-elem=newbase; L-listsize+=LISTINCREMENT; for(j=L-length-1;j=i;-j) L-elemj+1=L-elemj;
10、 L-elemi=e; +L-length;void Insertsq_L(SqList *L,int i,ElemType e)/插入算法函数【面向用户】 int k,s; color(13); printf(n顺序表当前数据:n); printsq_L(L); color(10); printf(请输入插入的位置和元素,以空格隔开:); scanf(%d%d,&k,&s); color(13); /*先判断位置是否合法,合法执行插入操作,反之则不执行。*/ if(kL-length) printf(n插入元素不合法!n); else printf(n顺序表插入元素前:n); printsq
11、_L(L); insertsq_L(L,k-1,s); printf(n顺序表插入元素后:n); printsq_L(L); color(10); void jianbiao(SqList *L) /建表:往表里放元素 int i,p,count; color(13); printf(n请输入您要创建的数据条数:); scanf(%d,&count); printf(n请输入数据:); for(i=0;i=0 & n=7) flag=1;break; else flag=0; system(cls); printf(您输入有误,请重新选择!n); while(flag=0); while(fl
12、ag=1) switch(n) case 1:initsq_L(L);break; /*表初始化*/ case 2:jianbiao(L);break; /*建表*/ case 3:Insertsq_L(L,i,e);break; /*插入*/ case 4:deletesq_L(L,i);break; /*删除*/ case 5:search_L(L,e);break; /*查找*/ case 6:modify_L(L,e1,e2);break; /*修改*/ case 7:printsq_L(L);break; /*打印*/ case 0:free(L);exit(0);break; de
13、fault:system(cls);goto start; printf(n是否继续进行(y or n): ); fflush(stdin);/清空在此前输入缓冲区 a=getchar(); if(a=y|a=Y) flag=1; system(cls); /*清屏*/ Menu(); /*调用菜单函数*/ printf(请再次选择你需要操作的步骤(0-7): ); fflush(stdin);/清空在此前输入缓冲区 scanf(%d,&n); else free(L);/释放顺序表 exit(0); 实验结果:1. 表初始化:2.建表:注:若以空格键隔开数据,多输入无影响,计算机读取完指定数目数据后,自动结束读取。3-1.插入位置合法:3-2.插入位置不合法:4.删除:5-1.查找成功:5-2.查找-没有相应数据:6-1.找到修改元素,并确定修改:6-2.找到修改元素,不修改:6-3.没找到修改元素:问题讨论:1.元素插入及删除过程中,计算机储存结构中元素位置从0开始,但面向用户时,应考虑人的自然思维,即面向用户时应以1为第一个元素位置,计算机实现需要把位置i=i+1.注:文件名为:学号+(次数)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1