数据结构上机考试试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构上机考试试题(C++语言版)
考试要求:本次考试共列考核试题4大题,考生可以在所列4个考核试题中任选3个小题(即可能只属于2个大题),作为上机考核试题。
考核原则:所选题目在上机编程调试通过后即为考核通过。监考教师依据学生编程及调试通过与否情况给予考核成绩。
考核成绩评分标准:
所选3个题目全部编写出程序并调试通过:优
所选3个题目全部编写出程序,但只有2个上机调试通过:良
所选3个题目全部编写出程序,但只有1个上机调试通过:及格
所选3个题目全部编写出程序但都没有上机调试通过,或没有编写出全部程序:不及格。考核时间:2小时。
考核试题:
1、建立一个顺序方式存储的线性表,向表中输入若干元素后进行以下操作:
(1)向线性表的表头、表尾或合适位置插入元素
(2)对线性表按升序或降序输出
2、建立一个动态链接方式存储的线性表,向表中输入若干元素后进行以下操作:
(1)从单链表中查找指定元素
(2)返回单链表中指定序号的结点值
3、建立一个动态链接结构存储的二叉树,向这棵二叉树进行以下操作:
(1)按任中序遍历次序输出二叉树中的所有结点
(2)求二叉树的叶子数
4、编写一个对整型数组A[n+1]中的A[1]至A[n]元素进行选择排序的算法,使得首先从待排序区间中选择出一个最大值并同最后一个元素交换,再从待排序区间中选择出一个最小值并同最第一个元素交换,反复进行直到待排序区间中元素的个数不超过1为止。
#include<>
#include<>
#include""
//初始化线性表
void InitList(LinearList& L, int ms)
{
=new ElemType[ms];
if(! {
cerr<<"Memory allocation failure!"< exit(1); } =0; =ms; } //清空线性表 void ClearList(LinearList& L) { =0; } //求线性表长度 int ListSize(LinearList& L) { return ; } //检查线性表是否为空 bool ListEmpty(LinearList& L) { return ==0; } //检查线性表是否为满 bool ListFull(LinearList& L) { return ==; } //遍历线性表 void TraverList(LinearList& L) { for(int i=0; i<; i++) cout<<[i]<<' '; cout< } //从线性表中查找元素 bool FindList(LinearList& L, ElemType& item) { for(int i=0; i<; i++) if[i]==item) { item=[i]; return true; } return false; } //更新线性表中的给定元素 bool UpdateList(LinearList& L, const ElemType& item) { for(int i=0; i<; i++) if[i]==item) { [i]=item; return true; } return false; } //向线性表的表头、表尾或合适位置插入元素 bool InsertList(LinearList& L, const ElemType& item, int mark) { if(ListFull(L)) return false; if(mark>0) { for(int i=; i>=0; i--) [i+1]=[i]; [0]=item; } else if(mark<0) []=item; else {for(int i=0; i<; i++) if(item<[i]) break; for(int j=; j>=i; j--) [j+1]=[j]; [i]=item; } ++; return true; } //从线性表中删除表头、表尾或等于给定值的元素 bool DeleteList(LinearList& L, ElemType& item, int mark) { if(ListEmpty(L)) return false; if(mark>0) { item=[0]; for(int i=1; i<; i++) [i-1]=[i]; } else if(mark<0) item=[]; else { for(int i=0; i<; i++) if[i]==item) break; if(i>= return false; else item=[i]; for(int j=i+1; j<; j++) [j-1]=[j]; } ; return true; } //对线性表按升序或降序输出 void OrderOutputList(LinearList& L, int mark) { int* b=new int[]; int i,k; for(i=0; i<; i++) b[i]=i; for(i=1; i<; i++) { k=i-1; for(int j=i; j<; j++) { if(mark==1 && [b[j]]<[b[k]]) k=j; if(mark!=1 && [b[k]]<[b[j]]) k=j; } if(k!=i-1) {int x=b[i-1]; b[i-1]=b[k]; b[k]=x;} } for(i=0; i<; i++) cout<<[b[i]]<<' '; cout< } #include<> const int ML=10; #include"" //主文件 void main() { LinearList a; InitList(a,ML); int i; ElemType x;