1、malloc.h#define size 20#define elemtype intstruct seqlist elemtype elemsize; int last;void menu() printf(n.); printf(n0.退出操作.n1.建立数据类型为整形的顺序表(长度小于20).n2.打印线性表.n3.在线性表中查找第i个元素,并返回其值.n4.在线性表中第i个元素之前插入一已知元素.n5.在线性表中删除第i个元素.n6.求线性表中所有元素值(整数)之和.n7.初始化.nvoid ins(seqlist *L)L-last=-1;void creat(seqlist *L)
2、 int i=0; elemtype j;请输入线性表元素(-1结束): scanf(%d,&j); while(j!=-1) L-elemi+=j; L-last+; if(isize-1) break; scanf( void print(seqlist *L) int i;顺序表中元素为: for(i=0;ilast;i+) printf(%dt,L-elemi);int find(seqlist *L,int i) if(iL-last+1) return 0; else return(L-elemi-1);int insert(seqlist *L,int i,int x) int
3、j; if(L-last+1=size|ij=i-1;j-) L-elemj+1=L-elemj;elemi-1=x; return 1;int del(seqlist *L,int i) int e,j;last=-1|ielemi-1; for(j=i;jlast-;int sum(seqlist *L) int i=0,s=0;last=-1) return 0;i+) s+=L-elemi; return s;int isempty(seqlist *L) if(L-last=-1) return 1; else return 0;void main() int i,cz,e; ele
4、mtype date; seqlist L; menu();请输入你要执行的操作的序号: i=scanf(cz); while(1) if(!i) printf(只能输入数值 else break;n再输入一次: rewind(stdin); i=scanf(while(cz) switch(cz) case 1: if(isempty(&L) ins(&L); creat(& else printf(表已经存在,先清空再进行此操作!n break; case 2: printf(表为空n else print(& case 3: printf(输入待查找元素的位置: scanf(i); if
5、(find(&L,i)查找的第%d个元素为%dn,i,find(&L,i); else查找位置错误n case 4:请输入要插入的元素及位置:date); if(insert(&L,i,date)插入元素成功! else printf(插入位置不合法或栈已满! case 5:请输入要删除元素的位置n e=L.elemi-1; if(del(& printf(删除第%d个值为%d的元素n,i,e);删除成功n Else printf(删除位置不合法或表已空n case 6:表已空!线性表中所有元素值(整数)和:%dn,sum(&L); case 7: ins(&break; default:无此
6、操作!n只能输入数值测试数据与实验结果7.初始化1.建表2.打印3.查找4.插入不合法 长度超过205.删除然后打印4.插入合法6.求和二、链表(带头结点)基本操作实验数据元素类型ElemType取字符型char。按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):1 创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内;2 打印(遍历)该链表(依次打印出表中元素值);3 在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;4 在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;5 在链表中按照有序
7、方式插入一已知字符元素;6 在线性表中删除第i个结点;7 计算链表的长度。 #includenext=*L; n=0;void creat(linklist L) int i=0,j; Node *s,*r; elemtype csize,t; r=L-next;请输入字符型元素(最多15个,输入字符结束):%s,c); while(ci!=) n+; i+; i=0;n; for(j=i;n-i-1; if(cjdata=t; r-next=s; r=s;void length(linklist L)链表长度为:,n);void show(linklist L) int j; Node *p
8、; p=L; if(!p) printf(表为空!return; for(j=0;%c,p-next-data); p=p-int isempty(linklist L) Node *pre; pre=L; if(pre-next=L) return 0;void find4(linklist L,int i) int j=0; if(isize)查找位置错误! while(j if(n=0) return; if(p-data!=k) p=p- else printf(第%d个元素是要查找的元素%c,i,k);链表中无此字符!void insert(linklist L,elemtype t
9、) Node *r,*s; int i=0; r=L; if(n=size)表已满! for(i;n-1&tdata; r=r- s=(Node *)malloc(sizeof(Node); s-next=r- r-插入成功! n+; return;void del(linklist L,int i) Node *p,*r;n) printf(删除位置不对!i-1)p=p-开始删除 r=p- p- free(r);删除成功! n-;.n0.退出程序.n1.初始化单循环链表.n2.创建任意字符型有序(递减排序 最长15)单循环链表.n3.打印(遍历)该链表(依次打印出表中元素值).n4.在链表中
10、查找第i个元素.n5.在链表中查找与一已知字符相同的第一个结点.n6.在链表中按照有序方式插入一已知字符元素.n7.在线性表中删除第i个结点.n8.计算链表的长度.n int cz,i,j,k; char key,t; linklist L; if(! else rewind(stdin); while(cz) switch(cz) case 1: init(& if(isempty(L) creat(L);表已存在,请先初始化单循环链表! show(L);请输入查找的第i个元素的i值: j=scanf( while(1) if(!j) break; rewind(stdin); j=scanf( find4(L,i);请输入要查找的字符:key); find5(L,key);请输入要插入的字符:t); insert(L,t);输入要删除的第i个元素的i值:k); del(L,k); case 8: length(L); menu(); while(1) i=scanf(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1