数据结构上机考试(含答案)_资格考试-计算机等级考试

上传人:枫** 文档编号:568746509 上传时间:2024-07-26 格式:PDF 页数:32 大小:792.75KB
返回 下载 相关 举报
数据结构上机考试(含答案)_资格考试-计算机等级考试_第1页
第1页 / 共32页
数据结构上机考试(含答案)_资格考试-计算机等级考试_第2页
第2页 / 共32页
数据结构上机考试(含答案)_资格考试-计算机等级考试_第3页
第3页 / 共32页
数据结构上机考试(含答案)_资格考试-计算机等级考试_第4页
第4页 / 共32页
数据结构上机考试(含答案)_资格考试-计算机等级考试_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《数据结构上机考试(含答案)_资格考试-计算机等级考试》由会员分享,可在线阅读,更多相关《数据结构上机考试(含答案)_资格考试-计算机等级考试(32页珍藏版)》请在金锄头文库上搜索。

1、v . . . . . . 资 料. . 数据结构上机练习题 1、设有两个有序序列,利用归并排序将它们排成有序表,并输出。 2、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果在输出“YSE ” ;否则,将它插入到序列中使它仍然有序,并输出排序后的序列。 3、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果不在,则输出“NO ” ,否则,将它从序列中删除它,并输出删除后的序列。 4、从键盘输入一组任意数据,建立一个有序链表,并从链头开始输出该链,使输出结果是有序的。 5、从键盘输入一组任意数据,建立一个包含所有输入数据的单向循环链表,并从链表的任意开始,依次输出该链表中的所有结

2、点。 10、设有一个链表, (自己建立,数据从键盘输入) ,再从键盘输入一个数,判别是否在链表中,如果不在,则输出“NO “,否则,将它从链表中删除,并输出删除后的链表。 11、设有一个链表, (自己建立,数据从键盘输入) ,再从键盘输入一个数,判别是否在链表中,如果在输出“YSE ” ,否则,将它从插入到链头,并输出插入后的链表。 12、设有一个链表, (自己建立,数据从键盘输入) ,再从键盘输入一个数,判别是否在链表中,如果在输出“YSE ” ,否则,将它从插入到链尾,并输出插入后的链表。 13、编写栈的压栈 push、弹栈 pop 函数,从键盘输入一组数据,逐个元素压入堆栈,然后再逐个从

3、栈中弹出它们并输出。 14、编写栈的压栈 push、弹栈 pop 函数,用它判别()的匹配问题。 15、按类似先序遍历结果输入一序列,建立一棵二叉树(算法 6、4) ,输出二叉树中序遍历的结果。 16、按类似先序遍历结果输入一序列,建立一棵二叉树(算法 6、4) ,输出二叉树先序遍历的结果。 17、按类似先序遍历结果输入一序列,建立一棵二叉树(算法 6、4) ,输出二叉树后序遍历的结果。 18、按类似先序遍历结果输入一序列,建立一棵二叉树(算法 6、4) ,输出二叉树的总结点数。 19、按类似先序遍历结果输入一序列,建立一棵二叉树(算法 6、4) ,输出二叉树叶子结点数。 20、按类似先序遍历

4、结果输入一序列, 建立一棵二叉树 (算法 6、4) , 输出此二叉树的高度。 21、给出一个无向图的邻接矩阵,输出各个顶点的度。 22、给出一个有向图的邻接矩阵,输出各个顶点的入度与出度。 23、输入一个有序序列,利用折半查找来查找一个数是否在序列中,如在,则输出其位置,否则输出“NO ” 。 24、用插入排序方法对一组数据进行排序,并输出每趟排序的结果。 25、用选择排序方法对一组数据进行排序,并输出每趟排序的结果。 26、用希尔(SHELL )排序方法对一组数据进行排序,并输出每趟排序的结果。 27、用快速排序方法对一组数据进行排序,并输出每趟排序的结果。 答案: 1. #include

5、#include #define N 5 #define NULL 0 v . . . . . . 资 料. . /链表的存储结构 typedef struct LNode int data; struct LNode *next; LNode,*list; /顺序创建链表 void creatList(list &l,int n) int i; list p,q; l=(list)malloc(sizeof(LNode); / 开辟头结点 p=l; / 指针 p 指向头结点 for(i=0;idata); p-next=q; /p 的下一个结点指向新开辟的结点 q p=q; / 将 p 指针

6、指向 q p-next=NULL; /归并排序 void mergeList(list &la,list &lb,list &lc) / 将已经排好序的 la,lb 中的数重新排列成有序(非递减) list pa,pb,pc; pa=la-next;pb=lb-next; lc=pc=la; / 默认将 la 做为 lc 的头结点(lb 亦可) while(pa&pb) / 让 pc 接到数据小的结点上,直到 pa,pb 两者有一指向空结点 if(pa-datadata) pc-next=pa;pc=pa;pa=pa-next; else pc-next=pb;pc=pb;pb=pb-next

7、; pc-next=pa?pa:pb; / 如果最后 la 有剩余结点,即将其直接加入到 lc 中,反之将 lb 的剩余结点加到 lc 中 free(lb); 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输

8、入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . void printList(list l) list p; p=l-next; while(p) printf(%d ,p-data);p=p-next; void main() list la,lb,lc; printf( 创建两个含%d 个元素的链表,请输入:n,N); creatList(la,N); creatList(lb,N); mergeList(la,lb,lc); pr

9、intList(lc); 2. #include #include #define N 5 #define NULL 0 #define OK 1 #define ERROR 0 /链表的存储结构 typedef struct LNode int data; struct LNode *next; LNode,*list; /创建链表 void creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; 判别是否在序列中如果在输出否则将它插入到序列中使它仍

10、然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . p=

11、q; p-next=NULL; /判断元素 e 是否在链表中 int inList(list l,int e) list p; p=l-next; while(p) if(p-data=e) return OK; / 发现在里面,返回真值 p=p-next; / 否则指针后移,继续找 return ERROR; /未找到,返回假值(没有执行 return OK; 语句) /插入元素 void insertList(list &l,int &e) list p,q,s; /q 为新插入的元素开辟一个存储空间的指针,s为 p 前一个指针,方便插入 p=l-next; s=l; while(p) i

12、f(edata) / 发现要插入的元素 e 比后面的小,开辟空间,并将 e 放入空间的数据域中 q=(list)malloc(sizeof(LNode); q-data=e; while(s-next!=p) s=s-next; / 找到 p 前的一个指针 q-next=p; / 画图好好理解 -s-p- s-next=q; / q- break; p=p-next; /输出链表 void printList(list l) list p; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删

13、除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . p=l-next; while(p) printf(%d ,p-data); p=p-next; void

14、 main() list l; int e; printf( 创建%d 个元素的链表,请输入%d 个元素:n,N,N); creatList(l,N); printf( 请输入要判断的元素:); scanf(%d,&e); if(inList(l,e) printf(YES ); else insertList(l,e); printList(l); 3. #include #include #define N 5 #define NULL 0 #define OK 1 #define ERROR 0 /链表的存储结构 typedef struct LNode int data; struct

15、 LNode *next; LNode,*list; /创建链表 void creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; p=q; p-next=NULL; /判断元素 e 是否在链表中 int insertDeleteList(list l,int e) list p,q; p=l-next; q=l; while(p) if(p-data=e) while(q-next!=p) q=q-next; /找到 p 前一个结点,方便删除操作 q

16、-next=p-next; / 删除结点 p free(p); return OK; / 发现在里面,返回真值 p=p-next; / 否则指针后移,继续找 return ERROR; /未找到,返回假值(没有执行 return OK; 语句) /输出链表 void printList(list l) list p; p=l-next; while(p) printf(%d ,p-data); p=p-next; void main() list l; int e; printf( 创建%d 个元素的链表,请输入%d 个元素:n,N,N); creatList(l,N); printf( 请输

17、入要判断的元素); scanf(%d,&e); 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐

18、个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . if(!insertDeleteList(l,e) printf(NO ); else printList(l); 4. #include #include #define N 5 #define NULL 0 #define OK 1 #define ERROR 0 /链表的存储结构 typedef struct LNode int data; struct LNode *next; LNode,*list; /创建链表 void creatList(list &l,int n) list p,q

19、; l=(list)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; p=q; p-next=NULL; /链表排序 void sortList(list &l) list p,q,r; /p 标记排序的轮数 int chang; / 用于交换结点中的数据 p=l-next; while(p-next!=NULL) q=l-next; / 每次比较从首结点开始 while(q-next!=NULL) 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则

20、输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . r=q-next; if(q-datar-data) /发现前一个比后一个大,交换数

21、据 chang=q-data;q-data=r-data;r-data=chang; q=q-next; / 相邻间下一个比较 p=p-next; / 下一轮比较 /输出链表 void printList(list l) list p; p=l-next; while(p) printf(%d ,p-data); p=p-next; void main() list l; printf( 创建%d 个元素的链表,请输入%d 个元素:n,N,N); creatList(l,N); sortList(l); printList(l); 5. #include #include #define N

22、5 #define NULL 0 #define OK 1 #define ERROR 0 /链表的存储结构 typedef struct LNode int data; struct LNode *next; LNode,*list; /创建链表 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从

23、链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . void creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); scanf(%d,&l-data); / 头结点也添加元素,方便输出 p=l; for(int i=1;idata); p-next=q; p=q; p-next

24、=l; / 让最后一个 p-next 指针指向头结点, 构成循环链表 /输出链表 void printList(list l,int pos) list p,q; int i; p=l; for(i=1;inext; / 找到指定位置的前一个位置 q=p-next; do if(pos=1) printf(%d ,p-data); p=p-next; / 如果指定位置为 1,即按原样输出 else p=p-next; printf(%d ,p-data); / 不然,p 先移到指定的位置,输出其数据 while(p-next!=q); /结束条件(p 移到的下一个位置不是 q,即不是最初的 p

25、,完成循环输出) void main() list l; int pos; printf( 创建%d 个元素的循环链表,请输入%d 个元素:n,N,N); creatList(l,N); printf( 请指明从第几个位置输出循环链表中的元素:); scanf(%d,&pos); 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否

26、在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . while(posN) printf( 输入的位置不存在,请重新输入. ); scanf(%d,&pos); printList(l,pos); 11#include #include #define N 5 #define NULL 0 #define OK 1 #d

27、efine ERROR 0 /链表的存储结构 typedef struct LNode int data; struct LNode *next; LNode,*list; /创建链表 void creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); scanf(%d,&l-data); / 头结点也添加元素,方便输出 p=l; for(int i=1;idata); p-next=q; p=q; p-next=l; / 让最后一个 p-next 指针指向头结点, 构成循环链表 /输出链表 void printList(

28、list l,int pos) list p,q; int i; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从

29、键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . p=l; for(i=1;inext; / 找到指定位置的前一个位置 q=p-next; do if(pos=1) printf(%d ,p-data); p=p-next; /如果指定位置为 1,即按原样输出 else p=p-next; printf(%d ,p-data); / 不然,p 先移到指定的位置,输出其数据 while(p-next!=q); /结束条件(p 移到的下一个位置不是 q,即不是最初的 p,完成循环输出) void main() list l; int

30、pos; printf( 创建%d 个元素的循环链表,请输入%d 个元素:n,N,N); creatList(l,N); printf( 请指明从第几个位置输出循环链表中的元素:); scanf(%d,&pos); while(posN) printf( 输入的位置不存在,请重新输入. ); scanf(%d,&pos); printList(l,pos); 12#include #include #define N 5 #define NULL 0 #define OK 1 #define ERROR 0 /链表的存储结构 typedef struct LNode int data; str

31、uct LNode *next; LNode,*list; /创建链表 void creatList(list &l,int n) 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果

32、在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . list p,q; l=(list)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; p=q; p-next=NULL; /判断元素 e 是否在链表中 int inList(list l,int e) list p,q; q=p=l-next; while(p) if(p-data=e) return OK; / 发现在里面,返回真值 p=p-next;

33、 / 否则指针后移,继续找 /没有执行 return OK; 语句,说明未找到 while(q-next!=p) q=q-next; / 找到链尾 p=(list)malloc(sizeof(LNode); / 为链尾重新开辟空间 p-data=e; / 接到链尾 p-next=q-next; q-next=p; return ERROR; /未找到,返回假值 /输出链表 void printList(list l) list p; p=l-next; while(p) printf(%d ,p-data); p=p-next; void main() 判别是否在序列中如果在输出否则将它插入到

34、序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料

35、. . list l; int e; printf( 创建%d 个元素的链表,请输入%d 个元素:n,N,N); creatList(l,N); printf( 请输入要判断的元素:); scanf(%d,&e); if(inList(l,e) printf(YES ); else printList(l); 13#include #include #define OK 1 #define Error 0 #define NULL 0 #define maxSize 100 /栈的存储结构 typedef struct int *base; int *top; int size; stack;

36、 /栈的初始化(顺序存储) int initStack(stack &s) / 开辟 maxSize 大小的空间,base 和 top 都指向基地址,同时判断是否开辟成功,不成功返回 0 if(!(s.base=s.top=(int*)malloc(maxSize*sizeof(int) return Error; s.size=maxSize; / 栈的大小为 maxSize return OK; /进栈操作 int push(stack &s,int e) *s.top=e; / 先将元素 e 赋值给 s.top 所指的存储空间 s.top+; /top 指针上移 return OK; 判

37、别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈

38、的压v . . . . . . 资 料. . /出栈操作 int pop(stack &s,int &e) if(s.base=s.top) return Error; /如果栈为空,返回 0 s.top-; /top 指针先后移 e=*s.top; / 将其所指的元素值赋给 e return e; void main() stack s; int n,e; printf( 请输入要创建栈的元素的个数:); scanf(%d,&n); initStack(s); for(int i=0;in;i+) scanf(%d,&e); push(s,e); while(s.base!=s.top) p

39、rintf(%d ,pop(s,e); 14#include #include #include #include #define stackincrement 8 #define OK 1 #define Error 0 #define NULL 0 #define maxSize 100 /栈的存储结构 typedef struct char *base; / 由于要存放括号,所以为 char 类型 char *top; int size; stack; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出

40、否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . /栈的初始化(顺序存储) int initStack(stack &s) / 注意开辟的

41、空间为 char 类型 if(!(s.base=s.top=(char*)malloc(maxSize*sizeof(char) return Error; s.size=maxSize; /栈的大小为 maxSize return OK; /进栈操作 int push(stack &s,int e) *s.top=e; / 先将元素 e 赋值给 s.top 所指的存储空间 s.top+; /top 指针上移 return OK; int isEmpty(stack s) return s.base=s.top?OK:Error; /出栈操作 char pop(stack &s,char &e

42、) if(isEmpty(s) return Error; / 如果栈为空,返回 0 s.top-; /top 指针先后移 e=*s.top; / 将其所指的元素值赋给 e return e; /括号匹配 int match() stack s; initStack(s); char ch100,e; int flag=1,i=0 ,lenth; /flag 用于标记,如果匹配,值为 1,否则为 0 scanf(%c,&chi); while(chi!=n) scanf(%c,&ch+i); / 先将所有输入的括号存放在数组 ch中 lenth=i-1; / 数组的长度,不包括n i=0; p

43、ush(s,chi); / 先将第一个括号压栈 if(chi=|chi=)|chi=) flag=0; /如果第一个压入的是右括号,则肯判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中

44、如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . 定不匹配,flag=0 else while(idata=ch; / 生成根结点 CreateBiTree(T-lchild);/构造左子树 CreateBiTree(T-rchild);/构造右子树 return OK; /CreateBiTree int PrintElement(int e) / 输出元素 e 的值 printf(%c,e); return OK; int InOrderTraverse(B

45、iTree T,int(*Visit)(int e) /采用二叉链表存储结构,visit 是对数据元素操作的应用函数, /中序遍历二叉树 T 的递归算法,对每个数据元素调用函数 visit。 /调用实例: InOrderTraverse(T,printElement); if(T) if (InOrderTraverse(T-lchild,Visit) if (Visit(T-data) if (InOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; void main() BiTree t; print

46、f( 请按先序遍历输入二叉树(当左右子树为空时用空格输入)n); CreateBiTree(t); printf( 该二叉树的中序遍历为:n); InOrderTraverse(t,PrintElement); printf(n); 16#include stdio.h #include stdlib.h #define stackinitsize 100 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出

47、该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . #define OK 1 #define ERROR 0 /二叉树的二叉链表存储结构 typedef struct BiTNode int data; struct BiTNode *lchi

48、ld,*rchild; / 左右孩子指针 BiTnode,*BiTree; int CreateBiTree(BiTree &T) /按先序次序输入二叉树中结点的值(一个字符) ,空格字符表示空树。 /构造二叉链表表示的二叉树 T. char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(BiTNode *)malloc(sizeof(BiTNode) exit(0); T-data=ch; / 生成根结点 CreateBiTree(T-lchild);/构造左子树 CreateBiTree(T-rchild);/构造右子树 return O

49、K; /CreateBiTree int PrintElement(int e) / 输出元素 e 的值 printf(%c,e); return OK; int PreOrderTraverse(BiTree T,int(*Visit)(int e) /采用二叉链表存储结构,visit 是对数据元素操作的应用函数, /先序遍历二叉树 T 的递归算法,对每个数据元素调用函数 visit。 /调用实例: PreOrderTraverse(T,printElement); if(T) if (Visit(T-data) if (PreOrderTraverse(T-lchild,Visit) if

50、 (PreOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; /preOrderTraVerse 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己

51、建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . void main() BiTree t; printf( 请按先序遍历输入二叉树(当左右子树为空时用空格输入)n); CreateBiTree(t); printf( 该二叉树的先序遍历为:n); PreOrderTraverse(t,PrintElement); printf(n); 17#include stdio.h #include stdlib.h

52、#define stackinitsize 100 #define OK 1 #define ERROR 0 /二叉树的二叉链表存储结构 typedef struct BiTNode int data; struct BiTNode *lchild,*rchild; / 左右孩子指针 BiTnode,*BiTree; int CreateBiTree(BiTree &T) /按先序次序输入二叉树中结点的值(一个字符) ,空格字符表示空树。 /构造二叉链表表示的二叉树 T. char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(BiTNode

53、 *)malloc(sizeof(BiTNode) exit(0); T-data=ch; / 生成根结点 CreateBiTree(T-lchild);/构造左子树 CreateBiTree(T-rchild);/构造右子树 return OK; /CreateBiTree int PrintElement(int e) / 输出元素 e 的值 printf(%c,e); return OK; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建

54、立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . int PostOrderTraverse(BiTree T,int(*Visit)(int e) /采用二叉链表存储结构,visit 是对数据元素操作

55、的应用函数, /后序遍历二叉树 T 的递归算法,对每个数据元素调用函数 visit。 /调用实例: PostOrderTraverse(T,printElement); if(T) if (PostOrderTraverse(T-lchild,Visit) if (PostOrderTraverse(T-rchild,Visit) if (Visit(T-data)return OK; return ERROR; else return OK; void main() BiTree t; printf( 请按先序遍历输入二叉树(当左右子树为空时用空格输入)n); CreateBiTree(t)

56、; printf( 该二叉树的后序遍历为:n); PostOrderTraverse(t,PrintElement); printf(n); 18#include stdio.h #include stdlib.h #define stackinitsize 100 #define OK 1 #define ERROR 0 /#define NULL 0 static int count=0; /二叉树的二叉链表存储结构 typedef struct BiTNode int data; struct BiTNode *lchild,*rchild; / 左右孩子指针 BiTnode,*BiTr

57、ee; int CreateBiTree(BiTree &T) /按先序次序输入二叉树中结点的值(一个字符) ,空格字符表示空树。 /构造二叉链表表示的二叉树 T. 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从

58、键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(BiTNode *)malloc(sizeof(BiTNode) return -1; T-data=ch; / 生成根结点 CreateBiTree(T-lchild);/构造左子树 CreateBiTree(T-rchild);/构造右子树 return OK; /Crea

59、teBiTree int PrintElement(int e) / 记录遍历结点数 count+; return OK; int PreOrderTraverse(BiTree T,int(*Visit)(int e) /采用二叉链表存储结构,visit 是对数据元素操作的应用函数, if(T) if (Visit(T-data) if (PreOrderTraverse(T-lchild,Visit) if (PreOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; /preOrderTraVerse

60、 void main() BiTree t; printf( 请按先序遍历输入二叉树(当左右子树为空时用空格输入)n); CreateBiTree(t); printf( 该二叉树的总结点数为: ); PreOrderTraverse(t,PrintElement); printf(%dn,count); 19#include stdio.h #include stdlib.h #define stackinitsize 100 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删

61、除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . #define OK 1 #define ERROR 0 static int count=0; /二叉树的二叉链表存

62、储结构 typedef struct BiTNode int data; struct BiTNode *lchild,*rchild; / 左右孩子指针 BiTnode,*BiTree; int CreateBiTree(BiTree &T) /按先序次序输入二叉树中结点的值(一个字符) ,空格字符表示空树。 /构造二叉链表表示的二叉树 T. char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(BiTNode *)malloc(sizeof(BiTNode) exit(0); T-data=ch; /生成根结点 CreateBiTree

63、(T-lchild);/构造左子树 CreateBiTree(T-rchild);/构造右子树 return OK; /CreateBiTree int PrintElement(int e) / 判断叶子结点的个数,此函数可不做操作 return OK; int PreOrderTraverse(BiTree T,int(*Visit)(int e) /采用二叉链表存储结构,visit 是对数据元素操作的应用函数, /先序遍历二叉树 T 的递归算法,对每个数据元素调用函数 visit。 /调用实例: PreOrderTraverse(T,printElement); if(T) if (Vi

64、sit(T-data) if (PreOrderTraverse(T-lchild,Visit) if(T-rchild=NULL) count+; / 当左右结点都为空时,即是叶子结点 if (PreOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结

65、点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . /preOrderTraVerse void main() BiTree t; printf( 请按先序遍历输入二叉树(当左右子树为空时用空格输入)n); CreateBiTree(t); PreOrderT

66、raverse(t,PrintElement); printf( 该二叉树的叶子结点的个数为: %dn,count); 20#include stdio.h #include stdlib.h #define stackinitsize 100 #define OK 1 #define ERROR 0 /二叉树的二叉链表存储结构 typedef struct BiTNode int data; struct BiTNode *lchild,*rchild; / 左右孩子指针 BiTnode,*BiTree; int CreateBiTree(BiTree &T) /按先序次序输入二叉树中结点的

67、值(一个字符) ,空格字符表示空树。 /构造二叉链表表示的二叉树 T. char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(BiTNode *)malloc(sizeof(BiTNode) exit(0); T-data=ch; /生成根结点 CreateBiTree(T-lchild);/构造左子树 CreateBiTree(T-rchild);/构造右子树 return OK; /CreateBiTree /首先分析二叉树的深度(高度)和它的左、右子树深度之间的关系。 /从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值

68、加 1。 /由此,需先分别求得左、右子树深度,返回其最大值,然后加 1 。 int GetDepth(BiTree T) if(T) 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如

69、果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . int depthLeft = GetDepth( T-lchild ); int depthRight= GetDepth( T-rchild ); return (depthLeftdepthRight?depthLeft:depthRight)+1; else return ERROR; void main() BiTree t; printf( 请按先序遍历输入二叉树(当左右子树为空时用空格输入)n); C

70、reateBiTree(t); printf( 该二叉树的高度为: %dn,GetDepth(t); 21. / 21、给出一个无向图的邻接矩阵,输出各个顶点的度。 #include #include #include using namespace std; const int max=50; typedef char type; typedef struct type vexsmax; bool arcsmaxmax; int vexnum,arcnum;/顶点个数、边数 graph; int main() graph g; cing.vexnumg.arcnum; int i,j; fo

71、r(i=0;ig.vexsi; memset(g.arcs,0,sizeof(g.arcs); for(i=0;ixy; g.arcsxy=1; g.arcsyx=1; cout 无向邻接矩阵为:endl; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自

72、己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . for(i=0;ig.vexnum;i+) for(j=0;jg.vexnum;j+)coutg.arcsij; coutendl; for(i=0;ig.vexnum;+i) int amount=0; for(j=0;jg.vexnum;+j) if(g.arcsij)+amount; cout 顶点g.vexsi的度为amountend

73、l; return 0; 22/22 、给出一个有向图的邻接矩阵,输出各个顶点的入度与出度。 #include #include #include using namespace std; const int max=50; typedef char type; typedef struct type vexsmax; bool arcsmaxmax; int vexnum,arcnum;/顶点个数、边数 graph; int main() graph g; cing.vexnumg.arcnum; int i,j; for(i=0;ig.vexsi; memset(g.arcs,0,size

74、of(g.arcs); for(i=0;ixy; g.arcsxy=1; cout 有向邻接矩阵为:endl; for(i=0;ig.vexnum;i+) 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一

75、个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . for(j=0;jg.vexnum;j+)coutg.arcsij; coutendl; for(i=0;ig.vexnum;+i) int in=0,out=0; for(j=0;jg.vexnum;+j) if(g.arcsij)+out; if(g.arcsji)+in; cout 顶点g.vexsi的出度为out 入度为inendl; return 0; 23/23 、输入一个有序序列

76、,利用折半查找来查找一个数是否在序列中, /如在,则输出其位置,否则输出NO。 #include #include #include using namespace std; typedef int type; struct sqlist type *data; int length; ; int init_sqlist(sqlist &L,int n) L.data=(type *)malloc (n+1)*sizeof(type); if(!L.data)return -2; for(int i=1;iL.datai; L.length=n; return 1; int binary_se

77、arch(sqlist L,type n) int low=1,high=L.length,mid; while(low=high) mid=(low+high)/2; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入

78、再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . if(L.datamid=n)return mid; else if(L.datamidn)low=mid+1; else high=mid-1; return 0; int main() int n; type t; sqlist L; cout 请输入有序表长度:n; cout 请按从小到大的顺序输入n个元素:endl; init_sqlist(L,n); cout 请输入要

79、查找的数t) n=binary_search(L,t); if(n) coutt在有序表中的位置是nendl; else coutt不在有序表中endl; return 0; 24/24 、用插入排序方法对一组数据进行排序,并输出每趟排序的结果。 #include #include #include using namespace std; typedef int type; struct sqlist type *data; int length; ; int init_sqlist(sqlist &L,int n) L.data=(type *)malloc (n+1)*sizeof(ty

80、pe); if(!L.data)return -2; for(int i=1;iL.datai; L.length=n; return 1; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在

81、链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . void straight_insert_sort(sqlist &L) int i,j,k=1; for(i=2;i=L.length;i+) if(L.dataiL.datai-1) L.data0=L.datai; for(j=i-1;L.data0L.dataj;j-) L.dataj+1=L.dataj; L.dataj+1=L.data0; cout 第k趟排序后序列为:endl; for(j=

82、1;j=L.length;j+)coutL.dataj ; coutendl; void binary_insert_sort(sqlist &L) int i,j,k; for(i=2;i=L.length;i+) L.data0=L.datai; int low=1,high=i-1,mid; while(low=high) mid=(low+high)/2; if(L.data0=high+1;-j)L.dataj+1=L.dataj; L.datahigh+1=L.data0; for(k=1;k=L.length;+k)coutL.datak ; coutendl; int main

83、() int n; sqlist L; cout 请输入序列长度n; cout 请输入n个元素:endl; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链

84、尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . init_sqlist(L,n); straight_insert_sort(L); /binary_insert_sort(L); return 0; 25/25 、用选择排序方法对一组数据进行排序,并输出每趟排序的结果。 #include #include #include using namespace std; typedef int type; struct sqlist type *data; int length; ; int

85、 init_sqlist(sqlist &L,int n) L.data=(type *)malloc (n+1)*sizeof(type); if(!L.data)return -2; for(int i=1;iL.datai; L.length=n; return 1; void select_sort(sqlist &L) int i,j,k,cur=1; for(i=1;iL.length;i+) int min=L.datai;k=i; for(j=i+1;jL.dataj) min=L.dataj;k=j; if(k!=i) type t=L.datak;L.datak=L.dat

86、ai;L.datai=t; cout 第cur趟排序后为:endl;cur+; for(j=1;j=L.length;+j)coutL.dataj ; coutendl; int main() int n; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自

87、己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . sqlist L; cout 请输入元素个数:n; cout 请输入n个元素:endl; init_sqlist(L,n); select_sort(L); 26/26 、用希尔(SHELL )排序方法对一组数据进行排序,并输出每趟排序的结果。 /掌握得不是很好 #include #include #include using namespa

88、ce std; typedef int type; struct sqlist type *data; int length; ; int init_sqlist(sqlist &L,int n) L.data=(type *)malloc (n+1)*sizeof(type); if(!L.data)return -2; for(int i=1;iL.datai; L.length=n; return 1; void Shell_Sort(sqlist &L,int dlta,int t) int i,j,k,cur=1; for(k=0;kt;+k) int dk=dltak; for(i

89、=dk+1;i=L.length;+i) if(L.datai0&L.data0L.dataj;j-=dk) L.dataj+dk=L.dataj; L.dataj+dk=L.data0; cout 第cur趟排序后为:endl;cur+; for(i=1;i=L.length;i+)coutL.datai ; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键

90、盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . coutn; init_sqlist(L,n); Shell_Sort(L,dlta,3); /* 10 49 38 65 97 76 13 27 49 55 04 */ 27. /27 、用快速排序方法对一组数据进行排序,并输出每趟排序

91、的结果。 #include #include #include using namespace std; typedef int type; struct sqlist type *data; int length; ; int init_sqlist(sqlist &L,int n) L.data=(type *)malloc (n+1)*sizeof(type); if(!L.data)return -2; for(int i=1;iL.datai; L.length=n; return 1; void Quick_Sort(sqlist &L,int low,int high) if(l

92、owhigh) L.data0=L.datalow; type key=L.datalow; int low1=low,high1=high; 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否

93、在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压v . . . . . . 资 料. . while(low1high1) while(low1=key)-high1; L.datalow1=L.datahigh1; while(low1high1&L.datalow1=key)+low1; L.datahigh1=L.datalow1; L.datalow1=L.data0; int loc=low1; Quick_Sort(L,low,loc-1); Quick_Sort(L,loc+1,

94、high); for(int i=1;i=L.length;i+)coutL.datai ; coutn; init_sqlist(L,n); Quick_Sort(L,1,n); 判别是否在序列中如果在输出否则将它插入到序列中使它仍然有序并输出排序后的序列设有一有序序列从键盘输入一个数判别是否在序列中如果不在则输出否则将它从序列中删除它并输出删除后的序列从键盘输入一组任意数据建立单向循环链表并从链表的任意开始依次输出该链表中的所有结点设有一个链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果不在则输出否则将它从链表中删除并输出删除后的链表设有一个链表自己建立数据从链表自己建立数据从键盘输入再从键盘输入一个数判别是否在链表中如果在输出否则将它从插入到链尾并输出插入后的链表编写栈的压栈弹栈函数从键盘输入一组数据逐个元素压入堆栈然后再逐个从栈中弹出它们并输出编写栈的压

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号