《数据结构线性表的顺序存储结构C语言实现》由会员分享,可在线阅读,更多相关《数据结构线性表的顺序存储结构C语言实现(13页珍藏版)》请在金锄头文库上搜索。
1、数学与信息技术学院20162017(下)学年计科专业2015级数据结构实验报告 1 学号:2015201018 姓名:汪继超实验名称线性表的顺序存储结构完成时间实验目的1 掌握线性表的概念,掌握顺序表的概念及其各种运算的原理。2 通过对线性表的查找、插入和删除算法的实现以加深对线性表的顺序存储结构的理解,为加强线性表在实际中的应用打下基础。3 用C语言实现并上机调试通过,认真填写实验报告实验内容1已知某线性表(a1,a2,an)=(1,2,,n),利用C语言编程完成以下操作:(1)定义函数initsq_L():创建该线性表的顺序存储结构;(2)定义函数insertsq_L():在第I个数据元素
2、前插入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 structElemType *elem; int l
3、ength;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=LIST_INIT_SIZE;color(13); pri
4、ntf(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,&k);color(13); printf(n顺序表删除元素前:n);pri
5、ntsq_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中的位序,否则返回0int i=1;p=L-elem;while(ilength) & (!(*compar
6、e)(*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=1;printf(n找到元素:%d 位置为%d n,L-elemj,j+1);color(10);if(flag=0) printf
7、(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) flag=1;printf(n找到元素:%d 位置为%d,L-elemj,j+1);printf(nn 1.修改 2.不修改 请输入: ); scanf(%d,
8、&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 e)/插入算法函数ElemType *newbase;int j;if(iL-length)printf(n插入元素不合法!n);exit(0);if(L-length=L-list
9、size)/开辟更大的空间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;L-elemi=e;+L-length;void Insertsq_L(SqList *L,int i,ElemType e)/插入算法函数【面向用户】int k,s;color(13); printf(n顺序
10、表当前数据:n);printsq_L(L);color(10); printf(请输入插入的位置和元素,以空格隔开:);scanf(%d%d,&k,&s);color(13); /*先判断位置是否合法,合法执行插入操作,反之则不执行。*/if(kL-length)printf(n插入元素不合法!n);elseprintf(n顺序表插入元素前:n);printsq_L(L);insertsq_L(L,k-1,s);printf(n顺序表插入元素后:n);printsq_L(L);color(10); void jianbiao(SqList *L) /建表:往表里放元素int i,p,count
11、;color(13); printf(n请输入您要创建的数据条数:);scanf(%d,&count);printf(n请输入数据:);for(i=0;icount;i+)scanf(%d,&p);insertsq_L(L,i,p);fflush(stdin);/清空在此前输入缓冲区printf(n已创建数据:);printsq_L(L);color(10);void Menu() printf( 欢迎来到顺序表算法操作中心 nn);printf( *菜单*n); printf( * 1.表初始化 2.建表 *n); printf( * 3.插入算法操作 4.删除算法操作 *n); printf( * 5.查找算法操作 6.修改算法操作 *n);printf( * 7.打印算法操作 0.退出