1、1 某顺序表(自己定义、建立),查找某数据元素,找到返回位序,找不到返回02 某顺序表(自己定义、建立),在合法的位置插入某数据元素3 某顺序表(自己定义、建立),在合法的位置删除某数据元素4 某顺序表(自己定义、建立),就地逆置(即不另设置空间)5 用头插法建立单链表,并输出6 用尾插法建立单链表,并输出7 某单链表(自己定义、建立),就地逆置(即不另设置空间)8 某单链表(自己定义、建立),查找某数据元素,找到返回位序,找不到返回09 某单链表(自己定义、建立),求其长度10 某单链表(自己定义、建立),在合法的位置插入某数据元素11 某单链表(自己定义、建立),在合法的位置删除某数据元素
2、12 某单链表(自己定义、建立),在最后位置插入或删除13 某二叉链表(自己定义、建立),输出前序、中序、后序遍历序列14 某二叉链表(自己定义、建立),求其高度(深度)15 某二叉链表(自己定义、建立),求其叶子结点数16 某二叉链表(自己定义、建立),求其总结点个数17 某二叉链表(自己定义、建立),将其左右子树交换方式:抽签,单人单桌,每组8-10人,杜绝作弊!时间:30分钟总分:100分 数据结构C语言描述10分 数据结构建立30分 基本操作30分 主函数20分 运行结果10分用途:20%计入学业成绩1.某顺序表(自己定义、建立),查找某数据元素,找到返回位序,找不到返回0#inclu
3、detypedef struct int elem100; int length;sqlist; void create(sqlist *L,int n) int i;printf(请输入%d个数:n,n);for(i=0;ielemi); L-length=n; void print(sqlist L,int n) int i;printf(顺序表为:);for(i=0;in;i+) printf(-%d,L.elemi);printf(n); int locate(sqlist L,int n) int i,e;printf(请输入需要查找的数:n);scanf(%d,&e);for(i=
4、0;in;i+)if(L.elemi=e) printf(找到该数据:%dn该数据的位置是:%dn,e,i); continue; return 0; main() sqlist l;int m; printf(输入此顺序表总数据的个数:); scanf(%d,&m); create(&l,m); print(l,m);locate(l,m);2. 某顺序表(自己定义、建立),在合法的位置插入某数据元素#includetypedef struct int elem100; int length;sqlist; void create(sqlist *L,int n) int i;printf(
5、请输入%d个数:n,n);for(i=0;ielemi); L-length=n; void print(sqlist L,int n) int i;printf(顺序表为:);for(i=0;in;i+) printf(-%d,L.elemi);printf(n); void insert(sqlist *L,int i,int e) int j; if(iL-length+1) printf(error);for(j=L-length;j=i-1;j-)L-elemj=L-elemj-1;L-elemi-1=e;L-length+; main() sqlist l; int m,e,i;
6、printf(输入此顺序表总数据的个数:); scanf(%d,&m); create(&l,m); print(l,m);printf(请输入需要插入的数据:n);scanf(%d,&e);printf(请输入需要插入数的位置:n);scanf(%d,&i);insert(&l,i,e);print(l,l.length);3. 某顺序表(自己定义、建立),在合法的位置删除某数据元素#includetypedef struct int elem100; int length;sqlist; void create(sqlist *L,int n) int i;printf(请输入%d个数:n
7、,n);for(i=0;ielemi); L-length=n; void print(sqlist L,int n) int i;printf(顺序表为:);for(i=0;in;i+) printf(-%d,L.elemi);printf(n); void del(sqlist *L,int i) int j; if(iL-length+1) printf(error); for(j=i;jlength-1;j+)L-elemj-1=L-elemj;L-length-; main() sqlist l; int m,e; printf(输入此顺序表总数据的个数:); scanf(%d,&m
8、); create(&l,m); print(l,m);printf(请输入需要删除数据位置:n);scanf(%d,&e);del(&l,e);print(l,l.length);4. 某顺序表(自己定义、建立),就地逆置(即不另设置空间)#includetypedef struct int elem100; int length;sqlist; void create(sqlist *L,int n) int i;printf(请输入%d个数:n,n);for(i=0;ielemi); L-length=n; void print(sqlist L,int n) int i;printf(
9、顺序表为:);for(i=0;in;i+) printf(-%d,L.elemi);printf(n); void nizhi(sqlist L,int n) int i,t; for(i=0;in/2;i+) t=L.elemi;L.elemi=L.elemn-i-1;L.elemn-i-1=t; for(i=0;in;i+) printf(-%d,L.elemi);printf(n); main() sqlist l; int m; printf(输入此顺序表总数据的个数:); scanf(%d,&m); create(&l,m); print(l,m);printf(此顺表逆置后为:);
10、 nizhi(l,m);5. 用头插法建立单链表,并输出#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)int i; Linklist L; Linklist p; L=new Lnode; L-next=NULL; for(i=0;idata=i; p-next=L-next; L-next=p; return L;void print(Linklist L)Linklist p;p=L-next;while(p)printf(-%d,p-data)
11、;p=p-next;printf(n);void main() int m=6; Lnode *head; head=create(m); print(head);6. 用尾插法建立单链表,并输出#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)int i; Linklist L; Linklist p;Linklist r; L=new Lnode; L-next=NULL; r=L; for(i=0;idata=i; r-next=p; r=p; p
12、-next=NULL; return L;void print(Linklist L)Linklist p;p=L-next;while(p)printf(-%d,p-data); p=p-next; printf(n);void main() int m=6; Lnode *head; head=create(m); print(head);7. 某单链表(自己定义、建立),就地逆置(即不另设置空间)#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)i
13、nt i; Linklist L; Linklist p;Linklist r; L=new Lnode; L-next=NULL; r=L; for(i=0;idata=i; r-next=p; r=p; p-next=NULL; return L;void print(Linklist L)Linklist p;p=L-next;while(p)printf(-%d,p-data); p=p-next; printf(n);void nizhi(Linklist L) Linklist p,q; p=L; p=p-next; L-next=NULL; while(p) q=p; p=p-n
14、ext; q-next=L-next; L-next=q; void main() int m=6; Lnode *head; head=create(m); print(head); printf(此逆置单链表为); nizhi(head); print(head);8. 某单链表(自己定义、建立),查找某数据元素,找到返回位序,找不到返回0#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)int i; Linklist L; Linklist p;L
15、inklist r; L=new Lnode; L-next=NULL; r=L; for(i=0;idata=i; r-next=p; r=p; p-next=NULL; return L;void print(Linklist L)Linklist p;p=L-next;while(p)printf(-%d,p-data); p=p-next; printf(n);int locate(Linklist L) int i=1,e; Linklist p;p=L-next;printf(请输入需要查找第几个的结点:);scanf(%d,&e);while(p)if(i=e)printf(该结
16、点的数据域是:%dn,p-data);elsereturn 0; p=p-next; i+; void main() int m=6; Lnode *head; head=create(m); print(head); locate(head);9. 某单链表(自己定义、建立),求其长度#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)int i; Linklist L; Linklist p;Linklist r; L=new Lnode; L-nex
17、t=NULL; r=L; for(i=0;idata=i; r-next=p; r=p; p-next=NULL; return L;void print(Linklist L)Linklist p;p=L-next;while(p)printf(-%d,p-data); p=p-next; printf(n);int length(Linklist L) int i=0; Linklist p;p=L-next; while(p) p=p-next; i+; return i;void main() int m=6; Lnode *head; head=create(m); print(he
18、ad); printf(单链表长度:%dn,length(head);10. 某单链表(自己定义、建立),在合法的位置插入某数据元素#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)int i; Linklist L; Linklist p;Linklist r; L=new Lnode; L-next=NULL; r=L; for(i=0;idata=i; r-next=p; r=p; p-next=NULL; return L;void print(
19、Linklist L)Linklist p;p=L-next;while(p)printf(-%d,p-data); p=p-next; printf(n);void insert(Linklist L,int i,int e) int j=0; Linklist p,s; p=L; if(!p)|(ji-1) printf(error); while(p&(jnext;+j;s=new Lnode;s-data=e;s-next=p-next;p-next=s; void main() int m=6,i,e; Lnode *head; head=create(m); print(head)
20、; printf(请输入需要插入的数:n);scanf(%d,&e); printf(请输入需要插入数的位置:n); scanf(%d,&i);insert(head,i,e);printf(新的单链表是:); print(head);11. 某单链表(自己定义、建立),在合法的位置删除某数据元素#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)int i; Linklist L; Linklist p;Linklist r; L=new Lnode;
21、L-next=NULL; r=L; for(i=0;idata=i; r-next=p; r=p; p-next=NULL; return L;void print(Linklist L)Linklist p;p=L-next;while(p)printf(-%d,p-data); p=p-next; printf(n);void del(Linklist L,int i)Linklist p,q;p=L;int j=0;while(p&(jnext;+j;q=p-next;p-next=q-next;delete q;void main() int m=6,e; Lnode *head; h
22、ead=create(m); print(head); printf(请输入需要删除的结点位置:n);scanf(%d,&e);del(head,e);print(head);12. 某单链表(自己定义、建立),在最后位置插入或删除#includetypedef struct Lnode int data; struct Lnode *next;Lnode,*Linklist;Linklist create(int n)int i; Linklist L; Linklist p;Linklist r; L=new Lnode; L-next=NULL; r=L; for(i=0;idata=i
23、; r-next=p; r=p; p-next=NULL; return L;void print(Linklist L)Linklist p;p=L-next;while(p) printf(-%d,p-data); p=p-next; printf(n);void insert(Linklist L,int e) Linklist p,s; p=L; while(p-next!=NULL)p=p-next;s=new Lnode;s-data=e;s-next=p-next;p-next=s; void del(Linklist L)Linklist p,q;p=L;while(p-nex
24、t!=NULL)q=p;p=p-next;q-next=NULL;delete p;void main() int m=6,e; Lnode *head; head=create(m); print(head); printf(请输入需要插入的数:n);scanf(%d,&e);insert(head,e);printf(新的单链表是:); print(head); printf(删除后的单链表是:n);del(head);print(head);13. 某二叉链表(自己定义、建立),输出前序、中序、后序遍历序列#includetypedef struct Bitnode int data;
25、struct Bitnode *lchild,*rchild;Bilnode,*Bitree;Bitree create() char ch; Bitree t; ch=getchar(); if(ch=*) t=NULL; else t=new Bilnode; t-data=ch; t-lchild=create(); t-rchild=create(); return t; void qianxu(Bitree t) if(t) printf(%c,t-data); qianxu(t-lchild); qianxu(t-rchild); void inorder(Bitree t) if
26、(t) inorder(t-lchild); printf(%c,t-data); inorder(t-rchild); void houxu(Bitree t) if(t) houxu(t-lchild); houxu(t-rchild); printf(%c,t-data); void main() Bitree t;printf(输入:);t=create();printf(这棵二叉树的前序遍历为:n);qianxu(t);printf(n);printf(这棵二叉树的中序遍历为:n);inorder(t);printf(n);printf(这棵二叉树的后序遍历为:n); houxu(t
27、);printf(n);14. 某二叉链表(自己定义、建立),求其高度(深度)#includetypedef struct Bitnode int data; struct Bitnode *lchild,*rchild;Bilnode,*Bitree;Bitree create() char ch; Bitree t; ch=getchar(); if(ch=*) t=NULL; else t=new Bilnode; t-data=ch; t-lchild=create(); t-rchild=create(); return t; int length(Bitree t) int h1,
28、h2;if(t=NULL)return 0; else h1=length(t-lchild); h2=length(t-rchild);if(h1h2)return h1+1;elsereturn h2+1; void main() Bitree t;printf(输入:);t=create();printf(这棵二叉树的高度为:%dn,length(t);15. 某二叉链表(自己定义、建立),求其叶子结点数#includetypedef struct Bitnode int data; struct Bitnode *lchild,*rchild;Bilnode,*Bitree;Bitre
29、e create() char ch; Bitree t; ch=getchar(); if(ch=*) t=NULL; else t=new Bilnode; t-data=ch; t-lchild=create(); t-rchild=create(); return t; int countzero(Bitree t) if(t=NULL) return 0; elseif(t-lchild=NULL&t-rchild=NULL) return 1; else return countzero(t-lchild)+countzero(t-rchild);void main() Bitre
30、e t;printf(输入:);t=create();printf(这棵二叉树叶子结点的个数为:%dn,countzero(t);16. 某二叉链表(自己定义、建立),求其总结点个数#includetypedef struct Bitnode int data; struct Bitnode *lchild,*rchild;Bilnode,*Bitree;Bitree create() char ch; Bitree t; ch=getchar(); if(ch=*) t=NULL; else t=new Bilnode; t-data=ch; t-lchild=create(); t-rch
31、ild=create(); return t; int count(Bitree t) if(t=NULL) return 0; else return count(t-lchild)+count(t-rchild)+1;void main() Bitree t;printf(输入:);t=create();printf(这棵二叉树的总结点个数为:%dn,count(t);17. 某二叉链表(自己定义、建立),将其左右子树交换#includetypedef struct Bitnode int data; struct Bitnode *lchild,*rchild;Bilnode,*Bitr
32、ee;Bitree create() char ch; Bitree t; ch=getchar(); if(ch=*) t=NULL; else t=new Bilnode; t-data=ch; t-lchild=create(); t-rchild=create(); return t; void change(Bitree t)if(t) Bitree a; a=t-lchild; t-lchild=t-rchild; t-rchild=a; change(t-lchild); change(t-rchild);void print(Bitree t) if(t) printf(%c,t-data); print(t-lchild); print(t-rchild); void main() Bitree t;printf(输入:);t=create();printf(交换后的二叉树先序遍历是:n);change(t);print(t);printf(n);