数据结构考试题目及答案详解 数据结构考试题型5篇
【请您参阅】下面供您参考的“数据结构考试题目及答案详解 数据结构考试题型5篇”是由阿拉网友精心整理分享的,供您阅读参考之用,希望此例范文对您有所帮助,喜欢就复制下载支持一下小编了!
数据结构考试题目及答案详解 数据结构考试题型篇1
一、表达式求值(2-3人)
问题描述:从键盘上输入中缀算数表达式,计算出表达式的值。 基本要求:
1.程序对所输入的表达式做简单的判断,如果表达式有错,能给出适当的提示。
2.能处理+、-、×、÷
这四种基本的算术运算符。
二、停车场管理(3-4人)
问题描述:假设停车场只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,如果车场内已经停满了汽车,则后来的汽车只能在门外的便道上等候。一旦停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门后,为它让路的车辆再按原次序进入停车场。每辆汽车在离开时都要依据停留时间交费(在便道上停留的时间不计费)。
基本要求:
1.汽车的输入信息格式为:到达/离去的标识,汽车牌照号码,到达/离去的时间。
2.对于不合理的输入信息有适当的提示,例如要求离开的汽车没在停车场或便道时有相应的提示。
提示:以栈模拟停车场,用队列模拟便道,另设一个栈临时停放为让路而从车场退出的车。
三、约瑟夫环问题(2人)
问题描述:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数作为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。
四、航空客运订票系统(4-5人)
问题描述:业务主要包括查询航线和客票预订的信息、客票预订和办理退票等。 基本要求:
1.系统必须能存储以下数据信息:
航班信息:飞机抵达城市、航班号、飞机号、起降时间、票价、总座位数和剩余座位数、已订票的客户名单。客户信息:客户姓名、证件号、座位号。2.系统能实现的功能:
承办订票业务:根据客户提出的要求查询该航班信息,若满足要求,则为客户办理订票手续,输出座位号。
退票业务:根据客户提供的航班号和订票数量办理退票手续。查询功能:查询航线信息(根据飞机的降落地点输出航班号、飞机好、起降时间、票价和剩余座位数)和客户预订信息(根据客户证件号输出航班号、飞机号和座位号)
五、汉诺塔游戏程序(2-3人)
问题描述:在平面上有三个位置a、b、c,在a位置上有n个大小不等的圆盘、小盘压在大盘上形成圆盘堆。要求将a位置的n个圆盘通过b位置移动到c位置上,并按同样的顺序叠放。移动圆盘时必须遵循以下规则:
1.每一次只能移动一个圆盘
2.圆盘可以放在a、b、c任何一个塔座上 3.任何时刻都不能将大圆盘压在小圆盘上 基本要求:
圆盘的个数从键盘输入(如3-64等);用动画的形式在屏幕上显示盘的移动。六、八皇后问题(2人)
问题描述:八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
基本要求:统计总共有多少种摆法,并以一定方式输出摆好的格局。
七、简单个人图书管理系统(3-4人)
问题描述:学生在学习过程中拥有很多书籍,对购买的书籍进行分类和统计是一种良好的习惯。如果用文件来存储相关书籍的各种信息,包括书号、书名、作者名、价格和购买日期,辅之以程序对书籍信息进行统计和查询会使书籍管理工作轻松有趣。 基本要求:
1.在外存中用文件存储书籍相关信息 2.在内存中设计数据结构存储图书信息 3.能查找、删除、插入、更新
4.能按作者名对书籍进行排序并显示排序结果
八、双端队列(2人)
问题描述:双端队列是插入和删除操作可以在两端进行的线性表,表的两端分别称作端点1和端点2。设计双端队列的数据结构,实现入队、出队等基本操作。
提示:为便于操作,采用带头结点的双链表存储双端队列
九、迷宫问题(2人)
问题描述:迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。在给出入口和出口的前提下,给出动态的迷宫行走路线 基本要求:
1.设计数据结构存储迷宫
提示:用二维数组表示迷宫,1代表有障碍,0代表无障碍 2.设计存储结构保存入口到出口的通路
十、火车车厢重排问题(4-5人)
问题描述:一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1-n,即货运列车按照第n站到第1站的次序经过车站。为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。车厢的重排工作可以通过转轨站完成。在转轨站中有一个出轨、一个入轨和一个缓冲轨,缓冲轨位于入轨和出轨之间。设缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。
基本要求:设计存储结构表示n个车厢、k个缓冲轨以及入轨、出轨。假设k=3。
十一、魔方阵(2人)
问题描述: 在一个n×n的矩阵中填入一个1到n2的数字(n为奇数),使得每一行、每一列、每条对角线的累加和都相等。
十二、简单个人电话号码查询系统(3-4人)
问题描述:人们在日常生活中经常要查找某个人或某个单位的电话号码,要求实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。 基本要求:
1.在外存中用文件保存电话号码信息
2.在内存中设计数据结构存储电话号码信息
3.将电话号码信息按某一字段排序,以提高查找效率 4.提供插入、删除、修改等维护功能。
十三、直接插入排序基于单链表的实现(1人)
问题描述:采用单链表存储待排序数据,在其上实现直接插入排序算法。 基本要求:排序的数据的个数及其内容由用户从键盘上输入。
十四、患者看病过程模拟(2人)
问题描述:患者到医院看病的过程为先排队等候再看病治疗。在排队的过程中主要重复做两件事:一是患者到达诊室,将病历交给护士,排到等候队列中候诊;二是护士从等候队列中取出下一个患者的病历,该患者进入诊室看病。设计算法模拟该过程。 基本要求:
1.以菜单的形式供用户选择相应的操作 2.可以查看当前正在就诊的病人的信息 3.可以查询当前等候就诊的病人的信息
十五、汽车牌照数据的排序与快速查找(3人)
问题描述:在汽车数据的信息模型中,汽车牌照是关键字,而且是具有结构特点的一类关键字。因为汽车牌照号是数字和字母混编的,例如01b7328,这种记录集合是一个适用于多关键字进行排序的典型例子。 基本要求:
1.首先利用链式基数排序方法排序,然后利用折半查找方法实现对汽车记录按关键字查找
2.汽车记录集合可以人工录入,也可以按自动方式随机生成十六、求图的中心点(2人)
问题描述:假设有一个公司在某个地区有n个产品销售点,现根据业务需要打算在其中某个销售点上建立一个中心仓库负责向其他销售点提供产品。由于运输路线不同,运输费用也不同。假定每天需要向每个销售点运输一次产品,那么应将中心仓库建在哪个销售点上才能使运输费用最低。
十七、集合的交、并和差运算的实现(1-2人)
问题描述:用有序单链表表示集合,实现集合的交、并、差运算 基本要求: 空间复杂度为o(1)
十八、单链表实现十进制大整数运算(1-2人)
问题描述:使用单链表实现不限大小的整数,每个结点存储一位数字,要求实现加、减运算。即能从键盘上输入两个大整数,比如:***12345和-***11111,则加的结果应为:***01234;减的结果应为:***23456。 基本要求: 从键盘上输入运算数和运算符,输出结果。
十九、哈夫曼编码(4-5人)
问题描述:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。这就要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。对于双工信道(即可以双向传输信息的信道),每端都需要一个完成的编译码系统。试为这样的信息收发站写一个哈夫曼的编译码系统。
基本要求:
1.初始化。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。
2.编码。利用已建好的哈夫曼树,对正文进行编码。
3.译码。对编码好的内容进行译码。
4.打印编码。
二十、商品货架管理(2人)
问题描述:商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。上货时需要倒货架,以保证生产商品较近的商品在较下的位置。用栈和队列作为周转,实现上述管理过程。
二十一、稀疏矩阵运算器(3人)
问题描述:实现两个稀疏矩阵的加、减、乘运算。
基本要求:可用三元组顺序表存储稀疏矩阵,矩阵的运算结果以通常的阵列形式输出。
二十二、校园导游程序(3-4人)
问题描述:用无向图表示你所在学校的景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等消息。 基本要求:
1.能查询各景点的相关信息
2.为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
二十三、排序综合(2-3人)
问题描述:利用随机函数产生n个随机整数(20000以上),对这些数使用多种方法进行排序。 基本要求: 1.至少采用三种方法(希尔排序、快速排序、堆排序)实现上述问题求解
2.统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法
3.统计每种算法所用的比较次数和交换次数,最后列表显示
二十四、线索二叉树(1人)
问题描述:建立一个中序线索二叉树,并且完成中序遍历。求该中序线索二叉树上已知结点在中序的前驱和后继;
本文地址:http:///zuowen/
数据结构考试题目及答案详解 数据结构考试题型篇2
数据结构试题6
一、单项选择题(每小题3分,共30分)
1.设栈的输入序列是1、2、3、4,则______不可能是其出栈序列。
()[a] 1234
[b] 2134
[c] 1432
[d] 4312
2.在一个具有n个结点的线性链表中查找某个结点,若查找成功,需要平均比较_____个结点。
()[a] n
[b] n/2
[c](n+1)/2
[d](n-1)/2
3.设每个字符占一个字节,二维数组 a中每个元素有6个字符组成,其行下标从0到9,列下标从0到3,元素_____当a按行优先存储起始地址与当a按列优先存储的起始地址相同。
()[a] a[3][0]
[b] a[3][1]
[c] a[3][2]
[d] a[2][3]
4.具有2000个结点的非空二叉树的最小深度为_______。
()[a] 9
[b] 10
[c] 11
[d] 12
5.已知某二叉树的后根序列是dabec,中根序列是debac,则先根序列是_____。
()[a] acbed
[b] decab
[c] deabc
[d] cedba 6.无向图中所有边的数目等于所有顶点的度数之和的_____倍。
()[a] 1
[b] 2
[c] 1/2
[d] 不一定
7.递归函数f(n)=f(n-1)+n+1(n>1)的递归体是_______。
()[a] f(0)=0
[b] f(1)=1
[c] f(n)=n+1
[d] f(n)=f(n-1)+n+1 8.若需要在o(nlog2n)的时间内完成对 n个元素的排序,且要求排序是稳定的,则可选择的排序方法是_______。
()[a] 快速排序
[b] 堆排序
[c] 归并排序
[d] 直接插入排序
9.在对n个元素的序列进行排序时,堆排序所需要的附加存储空间是__。()
[a] o(1)
[b] o(log2n)
[c] o(n)
[d] o(n log2n)
10.假定有k个关键字互为同义词,若用线性探查法把这k个关键字存入散列表中,则总的探查次数至少为______。
()
[a] k-1
[b] k
[c] k+1
[d] k(k+1)/22
二、填空题(每小题2分,共20分)
1.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为______,在表尾插入元素的时间复杂度为________。
2.在一棵二叉树中,第5层(根结点为1层)上的结点数最多为____________。
3.一棵高度为h的理想平衡树中,最少含有______个结点,最多含有________个结点。
4.在一个小根堆中,堆顶结点的值是所有结点中的_________,在一个大根堆中,堆顶结点的值是所有结点中的_________。
5.在一个具有n个顶点的无向图中,要连通所有顶点则至少需要_________条边。
6.假定一个图具有n个顶点和e条边,贝采用邻接矩阵、邻接表表示时,其相应的空间复杂度分别为__________和___________。
7.以二分查找方法查找一个线性表时,此线性表必须是_________存储的________表。
8.在线性表的散列存储中,处理冲突有___________和___________两种方法。
9.快速排序在平均情况下的空间复杂度为_____,在最坏情况下的空间复杂度为_____。
10.在一棵20阶 b_树中,每个非树根结点的关键字数目最少为_______个,最多为____。
三、判断题(认为对的,在题后的括号内打“√”,错的打“ⅹ”,每小题 1分,共10)
1.线性表中,每个结点都有一个前驱和一个后继。
()
2.有向图的邻接表和逆邻接表中的结点数一定相同。
()
3.单链表中要取得某个元素,只要知道该元素的指针即可,因此单链表是随机存取的存储结构。
()
4.在快速排序、归并排序和shell排序中,稳定的是shell排序。
()5.对不同的存储结构,检索的方法不同。
()
6.在散列表中,负载因子值越小则存元素时发生冲突的可能性就越大。
()
7.由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树。
()
8.若一棵二叉树的树叶是某子树对称序周游序列中的第一个结点,则它 必是该子树后序周游序列中的第一个结点。
()
9.二叉树按线索化后,任一结点均有指向其前驱和后继的线索。
()
10.在采用线性探查法处理冲突的散列表中,所有同义词在表中相邻。
()
四、简答题(每题10分,共60分)
1.说明数组和链表的区别,各有何优缺点?
2.回答下列关于堆的一些问题:
(1)堆的定义是什么?
(2)存储表示是顺序的,还是链式的?
(3)设有一个最小堆,其具有最小值、最大值的元素分别可能在什么地方?
3.完全二叉树用什么数据结构实现最合适,为什么?
4.在直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排 序和归并排序中,哪些易于在链表(包括各种单、双、循环链表)上实现?
5.用下列三种表示法画出下图g的存储结构
(1)相邻矩阵
(2)邻接表
(3)邻接多重表
6.已知序列(70,83,100,65,10,32,7),请给出采用插入排序法对该序列作升序排序时的每一趟结果。
五、算法设计题(每题15分,共30分)
说明:可以使用任何高级程序设计语言或伪(类)程序设计语言。
1.已知非空单链表第一个结点由 list 指出,写一算法,交换p 所指结点(不是链表中第一个结点,也不是链表中最后的那个结点)与其下一个结点在链表中的位置,并给出算法的时间复杂度。
2.设计一个算法,统计一个采用邻接矩阵存储、具有n个顶点的无向无权图所有顶点的度。
数据结构试题6答案
一、
二、1.o(n)o(1)
2.16
3.2 h 一 h 一1
4.最小值 最大值
5.n一1
6.o(n 2)o(n十e)、7.顺序 有序
8.开放定址法 链接法(次序无先后)
9.o(1og2n)
o(n)
10.9
三、
2.√
5.√
8.√
四、1.区别:数组占用连续的内存空间,链表不要求结点的空间连续。
各有何优缺点:(1)插入和删除操作。数组插入和删除需移动数据元素,链表插入和删除不移动数据元素,链表比数组易于实现插入和删除操作;(2)在空间占用方面,数组优于链表;
(3)在数据存取方面,数组是随机存取方式,而2 链表是顺序存取方式。2.(1)堆是 n个元素的有限序列 k1,k2,„ , kn,且满足以下条件: ki <= k2i 且ki <= k2i+
1i=1,2,„, n/2(最小堆)
或ki >= k2i 且ki >= k2i+1
i=1,2,„, n/2(最大堆)
(2)因为完全二叉树采用顺序存储更加有效,所以堆应采用顺序存储结构。
(3)最小堆的最小值元素必在堆顶,最大值的元素只有在叶结点上。
3.完全二叉树用一维数组实现最合适。(1)不存在空间浪费问题;(2)顺序存储方式下,父子结点之间的关系可用公式描述,访问结点方便。采用链表存储存在空间浪费问题,且不易寻找父结点。
4.在上述排序方法中,只有直接插入排序、冒泡排序、直接选择排序易于在链表上实现。
5.相邻矩阵:
邻接表:
邻接多重表:
6.初
始:(70),83,100,65,10,32,07 第1趟:(70,83),100,65,10,32,07 第2趟:(70,83,100),65,10,32,07 第3趟:(65,70,83,100),10,32,07 第4趟:(10,65,70,83,100),32,07 第5趟:(10,32,65,70,83,100),07 第6趟:(07,10,32,65,70,83,100)
五、算法的 adl描述如下:
算法change(list,p)q←list
while(next(q)<>p)do
q←next(q)r←next(p)next(q)←r next(p)←next(r)next(r)←p
算法的时间复杂度为o(n)
2.假设邻接矩阵为 adjacency(二维数组),顶点的度保存在一维数组a中。
算法的 adl描述如下: [初始化]
for i=1 to n do a[i]←0
for i=1 to n do for j=1 to n do
if adjacency[i,j]=1 then
a[i]←a[i]+1
数据结构试题7
一、单项选择题(每小题 2 分,共 20 分)
1.序列 a,b,c,d,e 顺序入栈,不能获得的序列是:()
a.abcde
2.通常算法分析中算法的空间复杂度是指:()
a.所需全部空间大小 b.完成运算所需辅助空间大小 c.待处理数据所需全部空间大小 d.存储空间的复杂程度
n树是:()
a.最佳二叉树
b.路径长度最短的二叉树
c.最佳二叉排序树 d.加权路径长度最短的二叉树
4.在单链表中删除 p指针後的节点 q 需要修改的指针域个数为:()a.2
5.设 n0,n1,n2 分别是二叉树中度为 0,1,2 的结点数,则有:()a.n0=n2+1
=n2-1
=n1+1
=n1-1 6.下列说法中错误的是:()
个结点的树的各结点度数之和为 n-1
个结点的有向图最多有 n*(n-1)条边 c.用相邻矩阵存储图时所需存储空间大小与图中边数有关 d.散列表中碰撞的可能性大小与负载因子有关
7. 若线性表采用顺序存储结构,每个元素占用 4个存储单元,第一个元素的存储地址为 100,则第 12 个 元素的存储地址是:()a. 113
8.下列哪一种排序方法的比较次数与纪录的初始排列状态无关?()a.直接插入排序 b.起泡排序 c.快速排序 d.直接选择排序
9.设有 5000 个无序的元素,希望用最快的速度挑选出其中前 50个最大的元素,最好选用:()
a.冒泡排序 b.快速排序 c.堆排序 d.基数排序
10.用某种排序方法对序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的 变化情况如下,则所采用的排序方法是:()
20,15,21,25,47,27,68,35,84 15,20,21,25,35,27,47,68,84 15,20,21,25,27,35,47,68,84
a.选择排序 b.希尔排序 c.归并排序 d.快速排序
二、判断题(每小题 1 分,共 10 分,对的打√,错的打×)
1.给出不同输入序列建造二叉排序树,一定得到不同二叉排序树。()2.有向图的邻接表和逆邻接表中的结点数一定相同。()
3.图 g 的拓扑序列唯一,则其弧数必为 n-1(其中 n为 g 的顶点数)。()4.在索引顺序文件中插入新的记录时,必须复制整个文件。()
5.如果某种排序算法是不稳定的,则该方法没有实际的应用价值。()6.对 n 个记录进行冒泡排序,在最坏情况下所需要的时间是 o(n 2)()7.在线性结构中,每个结点都有一个直接前驱和一个直接后继。() 树的任何子树都是 avl树。()
+树既适于随机检索,也适于顺序检索。()
10.两个字符串相等的充要条件是两个串包含的字符相同。()
三、填空题(每空 1 分,共 15分)
1.用起泡法对 n 个关键码排序,在最好情况下,只需做__次比较和 _______次移动; 在最坏的情况下要做___ _ _ _次比较。
2.若按层次顺序将一棵有n个结点的完全二叉树的所有结点从1到n编号,那么当i为_____且大于 1时,结点i 的左兄弟是结点___ _,否则结点 i 没有左兄弟。
3.具有 n 个结点的完全二叉树的深度为________。
4.树的三种主要的遍历方法是:__
__ ____、____
____和层次遍历。
5.采用散列技术实现散列表时,需要考虑的两个主要问题是: _____和解决_____ ___。
6.在一个带头结点的单循环链表中,p 指向尾结点的直接前驱,则指向头结点的指针 head
可用 p 表示为 head=_______。
7.栈顶的位置是随着_______、_________操作而变化的。
8. 已知一棵完全二叉树中共有 768 结点,则该树中共有_______个叶子结点。
四、简答题(第 1、2 题每小题 6 分,第 3、4、5 题每小题 8 分,共 36 分)1.已知一个无向图的顶点集为{a, b, c, d, e} ,其邻接矩阵如下图 1 所示
(1)画出该图的图形;
(2)根据邻接矩阵从顶点 a出发进行深度优先遍历和广度优先遍历,写出相应的遍历序列。
(图1)
(图2)
2.将上图 2所示的二叉树转换为树或树林(画出连线-删线图和结果图)。
3:设有一组关键码序列:
{6097,3485,8129,407,8136,6615,6617,526,12287,9535,9173,2134,1903,99} 和散列函数:h(key)=key mod 19。采用线性探测法解决冲突,试在 0~18 的散列地址空间中对该关键码序列构造散列表。
4.设有关键码集合 k={72,73,71,23,94,16,05,68},将其建成一个堆(画出每步所 得的图即可)。
5.从一棵空的 avl 树开始,将关键码 xal,wan,wil,zol,yo,xum 逐个插入,画出每插入一 个关键码后得到的 avl 树。
五、算法设计(19 分)
用类 pascal语言或类 c 语言写出将 n 个记录用冒泡排序法进行升序排 序的算法(第一次冒泡将排序码最小的记录放在第一个位置,第二次冒泡将排序码次最小的 记录放在第二个位置 „ „)。
数据结构试题7答案
一.
二. 1.× 2.√ 3.√ 4.× 5.× 6.√ 7.× 8.√ 9.× 10.×
三.
1. n-1 0 n(n-1)/2
2. 奇数 i-1
3. [log2n]+1
4. 先根 后根
5.选取好的散列函数 冲突(碰撞)
6. p↑.next↑.next
7. 进栈 退栈
8. 384 四.、深度:a,b,d,e,c 广度:a,b,e,d,c3、4、5、五、type node=record
var i,j:integer;
key:integer;
flag:0..1;info:datatype
x:node;end;
r:arrar[1..n] of node;for i:=1 to n do begin flag:=0;
for j:=n-1 to i do if r[j+1].key
then 算法结束
end
数据结构试题8 一.单项选择题(每小题 1 分,15 分)
1.编号为 a,b,c,d 的四辆列车,顺序开进栈式结构的站台,则开出车站的顺序中,不可能出 现的次序为:()
2.两个同义词子表结合在一起的现象称为:()a.碰撞 b.拉链 c.链接 d.堆积
3.一棵二叉树若前序和对称序周游得到的节点序列相同,则这棵二叉树满足:
()a.只能是一个节点的二叉树 b.为空二叉树或者该树所有节点的左子树为空二叉树
c.只能是空二叉树 d.为空二叉树或者该树所有节点的右子树为空二叉树
4.一棵深度为m的满三叉树定义为:或者是空三叉树,或者是第m层有3 1 ? m 个叶节点,其余 各层的节点均有三棵(左,中,右)非空子三叉树.对该树按层自左向右从 1 开始顺序编号, 则编号为 n的节点,其父节点若存在,则父节点编号为:()
5.有 n 个节点的有向完全图的边数为:()
(n-1)
(n-1)/2 6.广义表 l=(((),()),(),())的长度为:()
7.设 h(key)为散列函数,key 为记录的关键字.在散列表中,记录 r1 和 r2 的关键字分别为 key 1 和 key 2 ,称他们为同义词的条件是:() 1 =key 2
1 =key 2 且 h(key 1)=(key 2)=r2
1 ≠ key 2 且 h(key 1)=(key 2)8.下面那一个不是存储管理考虑的问题:()
a.压缩碎片问题 b.无用节点收集 c.表节点的顺序 d.空间溢出管理
9.不能存储二叉树的存储结构为:()
a.三叉链表 b.散列表 c.顺序表 d.二叉链表2 10.avl 数不平衡后要调整的情形有:() 种 种 种 种
11.在排序过程序中,使用辅助存储空间为 o(n)的算法是:()a.插入排序 b.归并排序 c.起泡排序 d.快速排序
12.若无向图中有 n 个结点,e 条边,则它的邻接表需要表节点数目为:()
+n
+1
+2n 13.字符串的紧缩存储形式是每个字符占:()
个二进制位 个字节 个字 个结点单元
14.循环队列 sq有 m 个单元,其满队条件是:()a.(+1)mod m=
= c.=m
d.=m 15.通常算法分析中算法的空间复杂度是指:()
a.所需全部空间大小 c.完成运算所需辅助空间大小 b.待处理数据所需全部空间大小 d.存储空间的复杂程度
二.填空题(每空1 分,共 10 分)
1.数据结构中的节点可分为两大类:___________和___________.2.结构的____________是指数据本身所占存储量/整个结构所占存储量.3.散列存储方法的关键问题是________________和________________.4.一棵树删去根节点就变成_______________.5.用二分检索法进行检索时,要求节点事先________________.6.设图 g 有 n个节点,t条边,若 d i 为节点 v i 的度数,则 t=___________.7.对于不连通的无向图和不是强连通的有向图进行周游,得到的是:________.8.排序方法的稳定性是指排序关键字值相同的记录在排序过程中不改变其原有的 _____________关系.三.多项选择题(错选,多选,漏选均不得分.每小题 2 分,共 6 分)1.根据描述算法的语言不同,可将算法分为:()
a.形式算法 b.非形式算法 c.伪语言算法3 d.运行不终止的程序可执行部分 e.运行终止的程序可执行部分
2.能够从任意节点出发访问到其余结点的结构有:()a.单链表 b.循环链表 c.双链表 d.二叉链表 e.邻接表
3.图的常见存储结构可以选取:()a.邻接表 b.邻接矩阵 c.逆邻接表 d.邻接多重表 e.散列表
四.简答题(每小题 4 分,共 12 分)
1.快速排序算法是否稳定?举一个具有六个记录(只考虑排序码)的例子予以说明.2.穿线树的最大优点是什么? 3.简述关键码和排序码的概念.五.分析计算题(每小题 7 分,共 21分)1.计算如下程序段的时间复杂度.„„
s:=0;for i:=1 to n do begin
t:=1;
while t<=i do begin t:=t*2;s:=s+t end end;„
2.将上三角矩阵(a ij)n * n的上三角元素逐行存放于数组 b[1..m]中(m 充分大),使得 b[k]=a ij ,且 k=f 1(i)+f 2(j)+c,试推导出函数 f 1(i), f 2(j)和常数 c,要求 f 1(i)和 f 2(j)中不含常数项.3.关键码序列{jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec},按字母序号排号序为{apr,aug,dec,feb,jan,jul,jun,mar,may,nov,oct,sep},然后用二分发进行检索,计算在等概率条件下检索成功的平均查找长度.六.综合题(5+5+8+10+8)
1.分步写出将下面树林转换成二叉树的过程.2.对于下图给出其邻接表,并从顶点 1 出发依据存储结构进行深度遍历,写出遍历结果.3.程序填空:在横线处填入适当的内容,将程序补充完整.程序功能:在有序表中用二分检索法查找关键码为 k的记录,若找到则返回其位置, 找不到则返回零.类型说明如下:
type node=record
key: integer;info :datatype end;
table=array[1..n] of node;
function binfind(r:table;k:integer):integer;begin
low:=1;hig:=n;_______1_____
while(______2_____)and(y=0)do begin mid : =(low+hig)span 2
if k=r[mid].key then
y:=mid else
if k>r[mid].key then _____3______
else _____4_______
end;binfind:=y;end;4.修改起泡排序算法,反方向进行扫描,即第一趟把排序码最小的记录放到最前头,第 二趟把排序码次小的放到第二个位置, 第三趟把排序码第三小的放到第三个位置, 如此反复进行.用类pascal语言给出该算法的程序.(类型说明与上面第3小题相同)
5.试编写一个交换二叉树t中节点的左右子树的类pascal语言算法,设节点的类型为:
type bitree=^node;node=record data:datatype;lchild,rchild:bitree end;
数据结构试题8答案
一、1、a
2、d
3、b
4、c
5、b
6、a
7、d
8、c
9、b
10、b
11、b
12、b
13、b
14、a
15、a
二、1、初等,组合
2、存储密度
3、散列函数的选取,冲突(碰撞)的解决
4、树(森)林
5、按关键码排序 6、1/2σdi
7、生成树林
8、相对位置
三、1、b c e
2、b c
3、a b c d
四、1、快速排序是不稳定的如对初始类排序码:81 2 5 82 4 1
经第一趟快排后为:〔1 2 5 82 4〕8
1经第二趟快排后为: 1 〔2 5 82 4〕81
经第三趟快排后为: 1 2 〔5 82 4〕81
经第四趟快排后为: 1 2 4 5 8
281
和 82 相对位置发生了变化
2、由于有了线索的存在而使的周游树形结构和找结点在指定次序下的前驱、后继的算法变
得很简单、直截了当。
3、关键码是其值能唯一确定一个记录的字段或字段组合,两个记录的关键码不可能相等 排序码是排序运算的依据,是结构中的一个或多个字段,两个记录的排序码可以相同
五、1、i=1 时 while 循环执行 1 次
故总排序时间为:σ[㏒ 2(i+1)]=σ[㏒ 2i]
i=2 时 while 循环执行 2 次
≈n㏒ 2 n i=3 时 while 循环执行 2 次
i=4 时 while 循环执行 3 次
i=5,6,7 时 while 循环执行 3 次 i=8 时 while 循环执行 4 次 „
2、k=n+(n-1)+(n-2)+„+〔n-(i-2)+(j-i+1)〕
=n(i-1)-〔i+2+„+(i-1)〕+j=ni-n-(i+1)(i+2)/2+j=〔i 2 +(2n+3)i〕/2+j-(n+1)所以 f1(i)=〔i 2 +(2n+3)i〕/2;f2(j)=j;c=-(n+1)
3、检索次数
平均查找长度为:1/12(1+2*2+3*4+4*5)=37/12
六、1、得到:
2、深度遍历结果为:1,2,3,5,4,6,7,83、1、y=0
2、low≤high
3、low:=mid+1
4、high:=mid-1
4、var
r:table;x:node;
i,j:integer;flag:0..1;
1.循环,i 以-1 为步长,从 1 到 n-1,执行(n-1 次冒泡)(1)flag ← 0
(2)循环,j以-1 为步长,从 n到 i+1 执行
若 r〔j〕.key<r〔j-1〕.key 则 flag<-1
x ← r〔j〕;r〔j〕← r〔j-1〕;r〔j-1〕← x(3)若 flag=0 则跳出循环
2.算法结束
5、procedure exchange_lr_node(t:bitree);
begin
if t=nil
then 算法结束
else begin q ← t ↑.lchild;t↑.lchild←t↑.rchild;t↑.rchild←q;
exchange_lr_node(t↑.lchild);exchange_lr_node(t↑.rchild)end;end;
数据结构试题9 一.单项选择题(每小题 1 分,15 分)1.作为一个算法必须满足:()
个要素 个要素 个要素 个要素
2.双链表中,删除节点 p之后的节点 q 需要修改的指针域的个数为:()
3.队列是一种:()
a.链表 表 c.顺序表 表
4.串的求子串运算 substr(‘abcdef’,2,3)的引用结果是:()a. ‘bcd’ b.‘bc’ c.‘cde’ d.‘cd’
5.循环队列 sq有 m 个单元,其满队条件是:()
a.=
c. mod m+1= +1=
d. = mod m+1
6.在列主序下顺序的存储数组 a 4 * 4 的上三角元素 a(3,2)的位置是第:() 个 个 个 个
7.广义表 d=(a,d)的深度为:()
c.+
d.–
8.有三个节点 a,b,c 可以构成多少种二叉树:()
9.有 n 个节点的完全二叉树,其深度为:()
10.中序序列和后序序列相同的二叉树是:()
a.完全二叉树
b.满二叉树
c.所有结点无左孩子的二叉树 d.所有结点无右孩子的二叉树
11.若有向图中有 n 个结点,e 条边,则它的邻接表需要表节点数目为:()
+1
12.克鲁斯卡尔(kruskal)算法求最小生成树,是针对那种图的:()a.无向图 b.有向图 c.连通无向图 d.连通带权图
13.在排序过程中,使用辅助空间为 o(n)的算法是:()a.插入法 b.归并法 c.快速 d.分配
14.在散列结构中,同义词是指:()
≠ 且 hash()=hash()
=
= 且 hash()=hash()
= 文件属于:()
a.顺序文件 b.散列文件 c.索引文件 d.多关键字文件
二.多项选择题(错选,多选,漏选均不得分.每小题 1 分,共 5 分)1.在下列算法中,涉及到栈运算的有:()
a.二叉树的遍历 b.广度优先搜索遍历 c.深度优先搜索遍历
d.表达式求值 e.基数排序
2.排序算法在最坏执行情况下,算法的时间复杂度是 o(n 2)的有:()a.插入排序法 b.块序排序法 c.堆排序法 d.归并排序法 e.基数排序法
3.稀疏矩阵通常采用的存储方式有:()
a.单链表 b.循环链表 c.三元组表 d.散列表 e.十字链表
4.根据排序期间数据规模的大小及数据所处存储器的不同,可以将排序分为:()a.插入排序 b.希尔排序 c.交换排序 d.内部排序 e.外部排序
5.能够从任一节点访问到其余节点的结构有:()
a.单链表 b.循环链表 c.双链表 d.二叉链表 e.邻接表
三.填空题(每空1 分,共10 分)
1.数据的基本存储结构有_________,________,_________,________四种.2.排序方法的稳定性是值排序关键字值相同的记录在排序过程中不改变其原有的 _____________关系.3.算法的确定性是指每条__________________.4.散列结构中处理冲突的方法基本上可分为两大类: __________和_________.5.文件的操作主要有:___________和__________两类.四.判断改错题(对的打”√”,错的打”╳”,并说明理由.每小题 2 分,判断和说明各得 1 分,判断3 错误,全题无分.共 10分)
1.二叉树是度为 2 的树.()2.堆排序是不稳定的,其时间复杂度为 o(n log 2 n).()3.队列是受限的线性表,限制在于节点的位置相对固定.()4.要完成树的层次遍历一般要利用栈作为辅助结构.()5.图的最小生成树如果存在,则一般唯一.()五.解释概念题(每小题 3 分,共 9 分)1.三元组表 2.拓扑排序 树
六.简答题(共 31分)
1.把下图森林转化为一棵二叉树,并画出主要转化过程图示.(4 分)
2.给定权集 w={2,3,4,7,8},试构造关于 w 的一棵哈夫曼树,并求其加权路径长度 wpl 的 值.(6 分)
3.对于下图给出其邻接表,并从顶点 1 出发依据存储结构进行广度遍历,写出遍历结果.4.有一棵二叉树其前序序列为 abcdef,中序序列为 bcaedf,画出此二叉树的示意图,并给 出其后序序列的线索树.(6 分)
5.对于关键字集合{51,28,36,86,7},请建立一个堆,要求画出堆形成的示意图.(6 分)
6.在双链表h中,现在要在节点p之后插入一个节点q,请写出插入动作的具体语句.(4分)七.算法设计(共20 分)
1.数组 a[1..m]作为循环队列的存储区域,试编写一个出队的类 pascal 语言算法.(6 分)2.利用类 pascal 语言写出统计二叉树中节点个数的算法(6 分).3.利用类 pascal 语言写出快速排序中一趟块排的算法(8 分).数据结构试题9答案
一、1、c
2、b
3、d
4、a
5、d
6、b
7、c
8、d
9、a
10、d
11、a
12、d
13、b
14、a
15、c
二、1、a c d
2、a b
3、a c d e
4、d e
5、b c
三、1、顺序,链接,索引,散列
2、相对位置
3、指令必须有确切含义,无歧义性
4、开地址法,拉链法
5、修改,检索
四、1、×
2、√
3、×
4、×
5、×
五、1、三元组表 p244
2、拓扑排序 p229
3、avl树 p180
六、3、邻接表存储表示同 a 卷
六、2 广度遍历结果:1, 2, 6, 3, 4, 7, 8, 5
4、后序:c b e f d a 5、6、q↑.llink←p
q↑.rlink←p↑.rlink p↑.rlink↑.llink←q p↑.rlink←q
七、算法设计(6+6+8=20′)1、
r=f
then
print(‘underflow’)else
f←f mod m+1
算法结束
2、type
pointer=↑node
node=record info: datatype;llink, rlink: pointer end var
t: pointer;
count: integer;进入算法时,二叉树已用二叉链表存储,t指向根结点,count初值为 0 procedure node_count(t: pointer;var count: integer);begin if t=nil
then 算法结束
else
begin count:=count+1;node_count(t↑.llink,count);node_count(t↑.rlink,count)end end;
3、type node=record key: integer;info: datatype end;
list=arrap〔1..n〕of node;var x:node;j:0..n;
procedure quickpass(var r:list;l,r:integer;var i:integer);begini:=l;j:=r;x:=r〔i〕;repeatwhile(r〔i〕.key>=)and(i<j=doj:=j-1;if i<j then
r〔j〕:=r〔j〕;i:=i+1;
while(r〔i〕.key<==and(i<j=do i:=i+1;if i<j then 〔r〔j〕:= r〔i〕;j:=j-1〕 until i=j r〔i〕:=x end
注:整个快速排序 procedure quicksort(var r:list;s,t:integer);begin if s<t then 〔quickpass(r,s,t,i);quicksort(r,s,i-1);quicksort(r,i+1,t)〕
end;
数据结构试题10 一.单项选择题(每小题 1 分,共 20分)
1.设n为正整数,以下程序段的执行次数是:
()
k:=0;s:=1;repeat s:=s+k;k:=k+1 until(k=-n)
a.(2n+3)次
(n+1)次
c.无限多次
次
2.序列 a,b,c,d,e 顺序入栈,不能获得的序列是:
()
3.数据结构的内容包括:
()a.三层次五要素
c.五层次三要素
b.三层次三要素
d.五层次五要素
4.在双链表中要在 p 所指的结点后插入一个新结点q,要修改的指针域个数为:()
个
个
个
个
5.在列主序下顺序的存储数组 a 4 * 4 的下三角元素 a(3,2)的位置是第:
()
个
个
个
个
个结点顺序存储的完全二叉树, i(1
7.对任何二叉树,设 n0,n1,n2 分别是度数为 0,1,2的结点数,则有:
()
=n2+1
=n2-1
=n1+1
=n1-1
8.对图(一)的二叉树,其后续遍历结果为:
()
图
(一)
9.结点可以排在拓扑序列中的图是:
()
a.无向图
b.有向图
c.有向无环图
d.无向有环图
10.串的求子串运算 substr(‘abcdefgh’,4,5)的引用结果是:
()
a.‘de’
b.‘defgh’
c.‘efgh’
d.‘bcde’
11.对于记录r1,r2其健值分别是k1和k2,数据为d1和d2,称r1和r2是同义词的条件是
()
=k2
=k2且 h(k1)≠h(k2)=d2
≠k2 且 h(k1)=h(k2)
12.快速排序属于:
()a.插入排序
b.交换排序
c.选择排序
d.归并排序
数不平衡后要调整的情形有:
()
种
种
种
种
算法是求图的:
()
a.连通分量
b.最短路径
c.最小生成树
d.拓扑序列
15.在排序过程序中,使用辅助存储空间为 o(n)的算法是:
()
a.插入排序
b.归并排序
c.起泡排序
d.快速排序
16.若无向图中有 n 个结点,e 条边,则它的邻接表需要表节点数目为:
()
+n
+1
+2n
17.字符串的紧缩存储形式是每个字符占:
() 个二进制位
个字节
个字
个结点单元
18.循环队列 sq有 m 个单元,其满队条件是:
()
a.(+1)mod m=
c.=m =
d.=m
文件属于:
()
a.顺序文件
b.散列文件
c.多关键字文件
d.索引文件
20.下列说法中错误的是:
()
个结点的有向图最多有 n*(n-1)条边
c.用相邻矩阵存储图时所需存储空间大小与图中边数有关
d.散列表中碰撞的可能性大小与负载因子有关
二.多项选择题(错选,多选,漏选均不得分,每小题 2 分,共 14 分)
1.根据描述算法的语言不同,可将算法分为:
()
a.形式算法
b.非形式算法
c.伪语言算法
d.运行终止的程序可执行部分
e.运行不终止的程序可执行部分
2.图的常见存储结构可以选取:
()a.邻接表
b.邻接矩阵
c.逆邻接表
d.邻接多重表
e.散列表
3.在下列算法中,涉及到栈运算的有:
()
a.二叉树遍历
b.广度优先搜索
c.深度优先搜索 d.构造哈夫曼树
e.表达式求值算法
4.某表组织如下:将元素均匀的分成块,块内元素不排序,块之间排序,则查找块及块内某元素实施的方法是:
()a.折半查块 顺序查元素
b.顺序查块 顺序查元素
c.顺序查块 折半查元素 d.散列法查找数据元素
e.折半查块 折半查元素
5.能够从任意节点出发访问到其余结点的结构有:
()
a.单链表
b.循环链表
c.双链表
d.二叉树表
e.散列表
6.数据的逻辑结构与:
()
a.数据元素本身的形式,内容有关
b.数据元素本身的形式,内容无关
c.数据元素的相对位置有关
d.数据元素的相对位置无关
e.所含节点个数无关
7.稀疏矩阵通常采用的存储方式有:
()
a.单链表
b.循环链表
c.三元组
d.散列表
e.正交表
三.判断说明题(对的打”√”,错的打”╳”,并说明理由.判断和说明各得 1 分,判断错误,全题无分.共 10 分)
1.在队列中,新插入的结点只能插到队头.()2.二叉树是度数最大为2 的树.()3.在哈希表中,相同的关键字散列在不同的地址空间上的现象称为冲突.()4.堆排序是不稳定的,其时间复杂度为:o(n log2n).()5.完成树的深度遍历一般要利用队列作为辅助结构.()四.解释概念题(每小题 4 分,共 12分) 树
2.稀疏矩阵
3.哈夫曼树 五.简答题(每小题 5 分,共 20 分)1.将图(二)所示二叉树转化成森林.图(二)
图
(三)2.什么是串的压缩存储(紧缩格式)? 他有哪些优缺点?
3.已知图g如图(三)所示,给出其邻接表,并写出从1出发进行深度优先和广度优先遍历的
结果.4.输入关键字序列:xal,wan,wil,zdl,yo,xul,yum,试建立建立一棵最佳二叉排序树.六.综合应用(每小题 12 分,共 24 分)
1.利用类 pascal 语言写出统计二叉树中节点个数的算法.2.利用类 pascal 语言写出直接选择排序的算法.数据结构试题10答案
一、1、c
2、d
3、a
4、b
5、c
6、a
7、c
8、a
9、d
10、c
11、b
12、d
13、b
14、b
15、c
16、b
17、b
18、b
19、a 20、d
二、1、b c d
2、a b c d
3、a c e
4、a b
5、b c
6、b d e
7、a c d e或 c d e
三、1、× 对尾
2、× 二叉数不是树的特例
3、× 不同,相同
4、√
5、× 不含任何字符,空白字符
四、1、avl 树
2、稀疏矩阵
3、哈夫曼树
五、1、2、尽可能将串中多个字符存入同一单元的存储方式,其优点是节省存储空间,缺点是对某些运算时间加长.3、深度优先:1,2,4,5,3,6,7 广度优先:1,2,3,4,5,6,7
4、六、1、type pointer=↑node node=record
info: datatype;llink,rlink: pointer end;
进入算法时,二叉树用二叉链表存储。count 初值为0 procedure
count_node(t: pointer;var count: integer);begin
if t≠nil then begin
count:=count+1;count_node(t↑.llink,count);count_node(t↑.rlink,count)end end;
2、type node=record
key: integer;info: datatype end;
list: array〔1..n〕of node var x: node;j: 0..n;以下略
数据结构考试题目及答案详解 数据结构考试题型篇3
数据结构课程设计题目
1.运动会分数统计(限1 人完成)
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
功能要求:
1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。5)数据存入文件并能随时查询
6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
输出形式:有合理的提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用
1、全部合法数据;
2、整体非法数据;
3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
2.飞机订票系统(限1 人完成)
任务:通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
3.文章编辑(限1 人完成)
功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共n行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出“全部字母数”、“数字个数”、“空格个数”、“文章总字数”(3)输出删除某一字符串后的文章;
4.宿舍管理查询软件(限1 人完成)
1)任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: a.采用交互工作方式
b.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)2)查询菜单:(用二分查找实现以下操作)a.按姓名查询
b.按学号查询
c.按房号查询
3)打印任一查询结果(可以连续操作)
5.校园导航问题(限1 人完成)
设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
6.教学计划编制问题(限1 人完成)
设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。
7.散列法的实验研究(限1 人完成)
散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。
8.图书借阅管理系统(限1 人完成)
主要分为两大功能:
1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书); 2)会员管理(增加会员、查询会员、删除会员、借书信息);
9.学生成绩管理(限1 人完成)
实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。
10.活期储蓄帐目管理(限1 人完成)
活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求: 1)能比较迅速地找到储户的帐户,以实现存款、取款记账; 2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
11.二叉排序树的实现(限1 人完成)
用顺序和二叉链表作存储结构
1)以回车('n')为输入结束标志,输入数列l,生成一棵二叉排 序树t; 2)对二叉排序树t作中序遍历,输出结果;
3)输入元素x,查找二叉排序树t,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;
12.最小生成树问题(限1 人完成)
设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种。求解算法多种。
13.通讯录的制作(限1 人完成)
设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合c语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。设计内容:本系统应完成一下几方面的功能: 1)输入信息——enter();2)显示信息———display();3)查找以姓名作为关键字 ———search();4)删除信息———delete();5)存盘———save();6)装入———load();设计要求:
1)每条信息至包含 :姓名(name)街道(street)城市(city)邮编(eip)国家(state)几项 2)作为一个完整的系统,应具有友好的界面和较强的容错能力 3)上机能正常运行,并写出课程设计报告
14.哈夫曼编码/译码器(限1 人完成)问题描述
设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。基本要求
1)将权值数据存放在数据文件(,位于执行程序的当前目录中)2)分别采用动态和静态存储结构
3)初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树; 4)编码:利用建好的哈夫曼树生成哈夫曼编码; 5)输出编码;
6)设字符集及频度如下表:
字符 空格 a b c d e f g h i j k l m 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 n o p q r s t u v w x y z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 进一步完成内容 1)译码功能; 2)显示哈夫曼树; 3)界面设计的优化。
15.图书管理系统(限1 人完成)问题描述
设计一个计算机管理系统完成图书管理基本业务。基本要求
1)每种书的登记内容包括书号、书名、著作者、现存量和库存量; 2)对书号建立索引表(线性表)以提高查找效率; 3)系统主要功能如下:
*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; *借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; *归还:注销对借阅者的登记,改变该书的现存量。进一步完成内容 1)系统功能的进一步完善; 2)索引表采用树表。3)设计内容 4)程序流程图 5)源程序
6)软件测试报告(包括所用到的数据及结果)
16.散列表的设计与实现(限1 人完成)问题描述
设计散列表实现电话号码查找系统。基本要求
1)设每个记录有下列数据项:电话号码、用户名、地址;
2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; 3)采用一定的方法解决冲突; 4)查找并显示给定电话号码的记录; 5)查找并显示给定用户名的记录。进一步完成内容 1)系统功能的完善;
2)设计不同的散列函数,比较冲突率;
3)在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。
17.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。(限1 人完成)
设有一元多项式am(x)和bn(x).am(x)=a0+a1x1+a2x2+a3x3+… +amxm
bn(x)=b0+b1x1+b2x2+b3x3+… +bnxn
请实现求m(x)= am(x)+bn(x)、m(x)= am(x)-bn(x)和m(x)= am(x)×bn(x)。要求:
1)首先判定多项式是否稀疏
2)分别采用顺序和动态存储结构实现; 3)结果m(x)中无重复阶项和无零系数项; 4)要求输出结果的升幂和降幂两种排列情况
18.利用栈求表达式的值,可供小学生作业,并能给出分数。(限1 人完成)
要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价
19.简易文本编辑器(限1 人完成)要求:
1)具有图形菜单界面;
2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除 3)可正确存盘、取盘; 4)正确显示总行数。
20.二叉树的中序、前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。(限1 人完成)
要求:遍历的内容应是千姿百态的。
树与二叉树的转换的实现。以及树的前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。
要求:遍历的内容应是千姿百态的。
21.学生搭配问题(限1 人完成)
一班有m个女生,有n个男生(m不等于n),现要开一个舞会.男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴.请设计一系统模拟动态地显示出上述过程,要求如下: 1)输出每曲配对情况
2)计算出任何一个男生(编号为x)和任意女生(编号为y),在第k曲配对跳舞的情况.至少求出k的两个值.3)尽量设计出多种算法及程序,可视情况适当加分
提示:用队列来解决比较方便.22.猴子吃桃子问题(限1 人完成)
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。
要求:
1)采用数组数据结构实现上述求解 2)采用链数据结构实现上述求解 3)采用递归实现上述求解
23.数制转换问题(限1 人完成)
任意给定一个m进制的数x,请实现如下要求 1)求出此数x的10进制值(用md表示)2)实现对x向任意的一个非m进制的数的转换。
3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。
24.排序综合(限1 人完成)
利用随机函数产生n个随机整数(20000以上),对这些数进行多种方法进行排序。要求:
1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。
2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。3)如果采用4种或4种以上的方法者,可适当加分。
25.学生成绩管理系统(限1 人完成)现有学生成绩信息文件1(),内容如下 姓名 学号 语文 数学 英语
张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 ….......…
学生成绩信息文件2(),内容如下: 姓名 学号 语文 数学 英语
陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77 ….......… 试编写一管理系统,要求如下: 1)实现对两个文件数据进行合并, 2) 3)中的数据按总分降序排序(至少采用两种排序方法实现)4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)要求使用结构体,链或数组等实现上述要求.6)采用多种方法且算法正确者,可适当加分.26.图的遍历的实现(限1 人完成)要求:
1)先任意创建一个图;
2)图的dfs,bfs的递归和非递归算法的实现 3)要求用有向图和无向图分别实现
4)要求用邻接矩阵、邻接表多种结构存储实现
27.线索二叉树的应用(限1 人完成)
要求:实现线索树建立、插入、删除、恢复线索的实现。
28.稀疏矩阵应用(限1 人完成)
要求:实现三元组,十字链表下的稀疏矩阵的加、转、乘的实现。(1)稀疏矩阵的存储(2)稀疏矩阵加法(3)矩阵乘法(4)矩阵转置
29.树的应用(限1 人完成)
要求:实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。
30.文本文件单词的检索与计数 设计要求与分析:
要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。该设计要求可分为三个部分实现:其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。(1).建立文本文件(2)给定单词的计数
(3)检索单词出现在文本文件中的行号、次数及其位置(4)主控菜单程序的结构 ① 头文件包含 ② 菜单选项包含
建立文件、单词定位、单词计数、退出程序 ③ 选择1-4执行相应的操作,其他字符为非法。
31.任意长的整数加法(限1 人完成)
问题描述:设计一个程序实现两个任意长的整数的求和运算。
基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。
32.二叉平衡排序树(限1 人完成)
问题描述:从一棵空树开始创建,在创建过程中,保证树的有序性,同时还要针对树的平衡性做些调整。最终要把创建好的二叉排序树转换为二叉平衡排序树。基本要求:1.创建(插入、调整、改组)
2.输出
33.串的查找和替换(限1 人完成)
问题描述:打开1篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
34.约瑟夫环(限1 人完成)
问题描述:编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。
基本要求:
1、利用单循环链表作为存储结构模拟此过程;
2、键盘输入总人数、初始报数上限值m及各人密码;
3、按照出列顺序输出各人的编号。
35.构造可以使n个城市连接的最小生成树(限1 人完成)
问题描述:给定一个地区的n个城市间的距离网,用prim算法或kruskal算法建立最小生成树,并计算得到的最小生成树的代价。基本要求:
1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。
2、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)
3、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
36.客户消费积分管理系统(限1 人完成)
问题描述:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。基本要求:
1.采用一定的存储结构进行客户信息的存储; 2.对客户的信息可以进行修改、删除、添加; 3.能够根据消费情况进行客户积分的计算; 4.根据积分情况实行不同程度的打折优惠;
37.产品进销存管理系统(限1 人完成)
问题描述:针对某一种行业的库房的产品进销存情况进行管理。基本要求:
1.采用一定的存储结构对库房的货品及其数量进行分类管理; 2.可以进行产品类的添加、产品的添加、产品数量的添加;
3.能够查询库房每种产品的总量、进货日期、销出数量、销售时间等;
38.特殊矩阵的压缩存储算法的实现(限1 人完成)问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。基本要求:
1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值; 2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值;
39.算术表达式的求解(限1 人完成)
问题描述:给定一个算术表达式,通过程序求出最后的结果。基本要求:
1. 从键盘输入要求解的算术表达式; 2. 采用栈结构进行算术表达式的求解过程; 3. 能够判断算术表达式正确与否; 4. 对于错误表达式给出提示; 5. 对于正确的表达式给出最后的结果;
40.实时监控报警系统(限1 人完成)问题描述:建立一个报警和出警管理的系统 基本要求:
1.采用一定的存储结构存储报警信息,要求有内容、时间; 2.有一次的出警就应该在待处理的信息中删除这条信息; 3.记录出警信息;
4.待处理信息过多时会发出警告;
41.车厢调度(限1 人完成)
问题描述:假设停在铁路调度站入口处的车厢序列的编号一次为1,2,3,4。设计一个程序,求出所有可能由此输出的长度为4的车厢序列。
42.迷宫问题(栈)问题描述:
以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。基本要求:
首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向,如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(3,2,3),(3,1,2),…。测试数据:
迷宫的测试数据如下:左下角(1,1)为入口,右下角(8,9)为出口。实现提示: 计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设的迷宫没有通路。
可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。选做内容:
(1)编写递归形式的算法,求得迷宫中所有可能的通路;(2)以方阵形式输出迷宫及其通路。43.迷宫问题(队列)(同上)44二叉搜索树:各种搜索树效率比较 题目要求:
本题目要求对普通的二叉排序树、avl树分别实现制定操作,并分析比较这两种不同数据结构对应的一系列插入和删除操作的效率。要求测试对n个不同整数进行下列操作的效率:(1)按递增顺序插入n个整数,并按同样顺序删除;(2)按递增顺序插入n个整数,并按相反顺序删除;(3)按随机顺序插入n个整数,并按随机顺序删除;
要求n从1000到10000取值,并以数据规模n为横轴,运行时间为纵轴,画出3种不同数据结构对应的操作效率比较图。
45.病毒测试程序 本题的任务是:
当整个网络被感染后,计算有多少台机器被某个特定变种所感染。输入要求:
输入由若干组测试数据组成。
每组数据的第1行包含2个整数m和n(1≤m,n≤500),接下来是一个m*n的矩阵表示网络的初始感染状态,其中的正、负整数的意义如题目描述中所定义。
下面一行给出一个正整数q,是将要查询的变种的个数。接下去的q行里,每行给出一个变种的类型。当m或n为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:
对每一组测试,在一行里输出被某个特定变种所感染的机器数量。
46关键路径问题(限1 人完成)
问题描述:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。基本要求:
(1)对一个描述工程的aoe网,应判断其是否能够顺利进行。
(2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。
47.神秘国度的爱情故事
输入要求:输入由若干组测试数据组成。
每组数据的第1行包含一正整数n(1≤n≤50000),代表神秘国度中小村的个数,每个小村即从0到n-1编号。接下来有n-1行输入,每行包含一条双向道路的两端小村的编号,中间用空格分开。之后一行包含一正整数m(1≤m≤500000),代表着该组测试问题的个数。接下来m行,每行给出a,b,c三个小村 的编号,中间用空格分开。当n为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:对每一组测试给定的a,b,c,在一行里输出答案,即:如果c在a和b之间的路径上,输出yes,否则输出no。
48.并查集:检查网络
题目要求:给定一个计算机网络以及机器间的双向连线列表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输。请写出程序判断:任意指定两台计算机,它们之间是否可以进行文件传输?
输入要求:输入若干测试数据组成。对于每一组测试,第1行包含一个整数n(≤10000),即网络中计算机的总台数,因而每台计算机可用1到n之间的一个正整数表示。接下来的几行输入格式为i c1 c2或者 c或者c c1c2或者s,其中c1和c2是两台计算机的序号,i表示在c1和c2间输入一条连线,c表示检查c1和c2间是否可以传输文件,s表示该组测试结束。当n为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:对每一组c开头的测试,检查c1和c2间是否可以传输文件,若可以,则在一行中输出“yes”,否则输出“no”。
当读到s时,检查整个网络。若网络中任意两机器间都可以传输文件,则在一行中输出“the network is connected.”,否则输出“there are k components.”,其中k是网络中连通集的个数。两组测试数据之间请输出一空行分隔。
49.广义表的应用
由于广义表在结构上较线性表复杂得多,因此,广义表的运算也不如线性表简单。本设计要求实现的广义表的建立、查找、输出、取表头和取表尾以及求深度、求逆表等。本设计用一个主控菜单程序控制,共分为6个子系统。(1).建立广义表(2)输出广义表(3)结点的查找(4)求广义表表头(5)求广义表表尾(6)求广义表的深度
50.网络流:宇宙旅行 题目要求:
在走遍了地球上的所有景点以后,旅游狂人开始计划他的宇宙旅行项目。经过谨慎调查,他目前掌握了一张各卫星空间站可以临时容纳的旅客人数列表。但旅客从一个星球飞往另一个星球时,需要在若干卫星空间站临时停靠中转,而这些空间站不能接待任何旅客驻留,旅客必须立刻转乘另一艘飞船离开,所以空间站不能接待超过自己最大容量的旅客流。为了估计预算,现在旅游狂人需要知道终点星球的接待站应该设计多大容量,才能使得每艘飞船在到达时都可以保证让全部旅客下船。输入要求:
输入若干组测试数据组成。
每组测试数据的第1行包含旅行的起点星球和终点星球的名称和一个不超过500的正整数n(n为0标志全部测试结束,不要对该数据做任何处理)。
接下来的n行里,数据格式为:sourcei capacityi,其中sourcei和destinationi是卫星空间站的名称或起点、终点星球的名称,正整数capacityi是飞船从sourcei到destinationi一次能运载的最大旅客流量。每个名称是由a~z之间三个大写字母组成的字符串,例如:zju。测试数据中不包含任何到达起点星球的信息以及任何从终点星球出发的信息。输出要求:
对每一组测试,在一行里输出终点星球接待站应具有的最小容量,使得每艘飞船在到达时都可以保证让全部旅客下船。
数据结构考试题目及答案详解 数据结构考试题型篇4
数据结构课程设计题目
数据结构课程设计题目(大题目).doc
一、公司销售管理系统 项目开发基本要求
1.客户信息管理:对客户的基本信息进行添加、修改和删除。2.产品信息管理:对产品的基本信息进行添加、修改和删除。3.供应商信息管理:对供应商的基本信息进行添加、修改和删除。4.订单信息管理:对订单的基本信息进行添加、修改和删除。
二、高校科研管理系统
系统主要用于帮助高校或科研单位管理和维护各项科研相关资料 项目开发基本要求
1.系统用户管理模块:为系统新用户设置用户名及口令;操作员更改自己的系统口令。2.数据字典管理模块:管理项目性质包括:分为国家自然科学基金、863、部省科委及企业集团四种情况;范围包括:分为全国、国际、地方三种情况;检索源包括:分为ei、sci、核心和一般四种情况。
3.项目参加人员管理模块包括:显示添加修改删除查询。4.项目基本情况模块包括:显示添加修改删除查询。5.项目获奖情况模块包括:显示添加修改删除查询。6.期刊论文管理模块包括:显示添加修改删除查询。7.著作管理模块包括:显示添加修改删除查询。
8.科研工作量统计模块:按照学校科研工作量计算办法,为每位科研人员进行科研工作量的计算和统计。
9.科研积分统计模块:按照学校科研积分计算办法,为每位科研人员进行科研计分的计算和统计。
三、网络五子棋对战
四、不同排序算法模拟
五、科学计算器
数据结构课程设计题目
1.运动会分数统计
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
功能要求:
1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。5)数据存入文件并能随时查询
6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
输出形式:有合理的提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用
1、全部合法数据;
2、整体非法数据;
3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
2.飞机订票系统
任务:通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
3.文章编辑
功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共n行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出“全部字母数”、“数字个数”、“空格个数”、“文章总字数”(3)输出删除某一字符串后的文章;
4.宿舍管理查询软件
1)任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: a.采用交互工作方式
b.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)2)查询菜单:(用二分查找实现以下操作)a.按姓名查询 b.按学号查询 c.按房号查询
3)打印任一查询结果(可以连续操作)
5.校园导航问题
设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
6.教学计划编制问题
设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。
7.散列法的实验研究
散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。
8.图书借阅管理系统
主要分为两大功能:
1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书); 2)会员管理(增加会员、查询会员、删除会员、借书信息);
9.学生成绩管理
实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。
10.活期储蓄帐目管理
活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求: 1)能比较迅速地找到储户的帐户,以实现存款、取款记账; 2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
11.二叉排序树的实现
用顺序和二叉链表作存储结构
1)以回车('n')为输入结束标志,输入数列l,生成一棵二叉排 序树t; 2)对二叉排序树t作中序遍历,输出结果;
3)输入元素x,查找二叉排序树t,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;
12.最小生成树问题 设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种。求解算法多种。
13.通讯录的制作
设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合c语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。设计内容:本系统应完成一下几方面的功能: 1)输入信息——enter();2)显示信息———display();
3)查找以姓名作为关键字 ———search();4)删除信息———delete();5)存盘———save();6)装入———load();设计要求:
1)每条信息至包含 :姓名(name)街道(street)城市(city)邮编(eip)国家(state)几项 2)作为一个完整的系统,应具有友好的界面和较强的容错能力 3)上机能正常运行,并写出课程设计报告
14.哈夫曼编码/译码器 问题描述
设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。基本要求
1)将权值数据存放在数据文件(,位于执行程序的当前目录中)2)分别采用动态和静态存储结构
3)初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树; 4)编码:利用建好的哈夫曼树生成哈夫曼编码; 5)输出编码;
6)设字符集及频度如下表:
字符 空格 a b c d e f g h i j k l m 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 n o p q r s t u v w x y z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 进一步完成内容 1)译码功能; 2)显示哈夫曼树; 3)界面设计的优化。
15.图书管理系统 问题描述
设计一个计算机管理系统完成图书管理基本业务。基本要求
1)每种书的登记内容包括书号、书名、著作者、现存量和库存量; 2)对书号建立索引表(线性表)以提高查找效率; 3)系统主要功能如下:
*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; *借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; *归还:注销对借阅者的登记,改变该书的现存量。进一步完成内容 1)系统功能的进一步完善; 2)索引表采用树表。3)设计内容 4)程序流程图 5)源程序
6)软件测试报告(包括所用到的数据及结果)
16.散列表的设计与实现 问题描述
设计散列表实现电话号码查找系统。基本要求
1)设每个记录有下列数据项:电话号码、用户名、地址;
2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; 3)采用一定的方法解决冲突; 4)查找并显示给定电话号码的记录; 5)查找并显示给定用户名的记录。进一步完成内容 1)系统功能的完善;
2)设计不同的散列函数,比较冲突率;
3)在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。
17.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。
设有一元多项式am(x)和bn(x).am(x)=a0+a1x1+a2x2+a3x3+… +amxm
bn(x)=b0+b1x1+b2x2+b3x3+… +bnxn
请实现求m(x)= am(x)+bn(x)、m(x)= am(x)-bn(x)和m(x)= am(x)×bn(x)。
要求:
1)首先判定多项式是否稀疏
2)分别采用顺序和动态存储结构实现; 3)结果m(x)中无重复阶项和无零系数项; 4)要求输出结果的升幂和降幂两种排列情况
18.利用栈求表达式的值,可供小学生作业,并能给出分数。
要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价
19.简易文本编辑器 要求:
1)具有图形菜单界面;
2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除 3)可正确存盘、取盘; 4)正确显示总行数。
20.二叉树的中序、前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。
要求:遍历的内容应是千姿百态的。
树与二叉树的转换的实现。以及树的前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。
要求:遍历的内容应是千姿百态的。
21.学生搭配问题
一班有m个女生,有n个男生(m不等于n),现要开一个舞会.男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴.请设计一系统模拟动态地显示出上述过程,要求如下: 1)输出每曲配对情况
2)计算出任何一个男生(编号为x)和任意女生(编号为y),在第k曲配对跳舞的情况.至少求出k的两个值.3)尽量设计出多种算法及程序,可视情况适当加分
提示:用队列来解决比较方便.22.猴子吃桃子问题
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。
要求:
1)采用数组数据结构实现上述求解 2)采用链数据结构实现上述求解 3)采用递归实现上述求解
23.数制转换问题
任意给定一个m进制的数x,请实现如下要求 1)求出此数x的10进制值(用md表示)2)实现对x向任意的一个非m进制的数的转换。
3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。
24.排序综合
利用随机函数产生n个随机整数(20000以上),对这些数进行多种方法进行排序。要求:
1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。
2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。3)如果采用4种或4种以上的方法者,可适当加分。
25.学生成绩管理系统
现有学生成绩信息文件1(),内容如下 姓名 学号 语文 数学 英语
张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 ….......…
学生成绩信息文件2(),内容如下: 姓名 学号 语文 数学 英语
陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77 ….......… 试编写一管理系统,要求如下:
1)实现对两个文件数据进行合并,
2)
3)中的数据按总分降序排序(至少采用两种排序方法实现)
4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)要求使用结构体,链或数组等实现上述要求.6)采用多种方法且算法正确者,可适当加分.26.图的遍历的实现 要求:
1)先任意创建一个图;
2)图的dfs,bfs的递归和非递归算法的实现 3)要求用有向图和无向图分别实现
4)要求用邻接矩阵、邻接表多种结构存储实现
27.线索二叉树的应用 要求:实现线索树建立、插入、删除、恢复线索的实现。
28.稀疏矩阵应用
要求:实现三元组,十字链表下的稀疏矩阵的加、转、乘的实现。(1)稀疏矩阵的存储(2)稀疏矩阵加法(3)矩阵乘法(4)矩阵转置
29.树的应用
要求:实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。
30.文本文件单词的检索与计数 设计要求与分析:
要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。该设计要求可分为三个部分实现:其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。(1).建立文本文件(2)给定单词的计数
(3)检索单词出现在文本文件中的行号、次数及其位置(4)主控菜单程序的结构 ① 头文件包含 ② 菜单选项包含
建立文件、单词定位、单词计数、退出程序 ③ 选择1-4执行相应的操作,其他字符为非法。
31.任意长的整数加法
问题描述:设计一个程序实现两个任意长的整数的求和运算。
基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。
32.二叉平衡排序树
问题描述:从一棵空树开始创建,在创建过程中,保证树的有序性,同时还要针对树的平衡性做些调整。最终要把创建好的二叉排序树转换为二叉平衡排序树。基本要求:1.创建(插入、调整、改组)2.输出
33.串的查找和替换
问题描述:打开1篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
34.约瑟夫环
问题描述:编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。基本要求:
1、利用单循环链表作为存储结构模拟此过程;
2、键盘输入总人数、初始报数上限值m及各人密码;
3、按照出列顺序输出各人的编号。
35.构造可以使n个城市连接的最小生成树
问题描述:给定一个地区的n个城市间的距离网,用prim算法或kruskal算法建立最小生成树,并计算得到的最小生成树的代价。基本要求:
1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。
2、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)
3、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
36.客户消费积分管理系统
问题描述:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。基本要求:
1.采用一定的存储结构进行客户信息的存储; 2.对客户的信息可以进行修改、删除、添加; 3.能够根据消费情况进行客户积分的计算; 4.根据积分情况实行不同程度的打折优惠;
37.产品进销存管理系统
问题描述:针对某一种行业的库房的产品进销存情况进行管理。基本要求:
1.采用一定的存储结构对库房的货品及其数量进行分类管理; 2.可以进行产品类的添加、产品的添加、产品数量的添加;
3.能够查询库房每种产品的总量、进货日期、销出数量、销售时间等;
38.特殊矩阵的压缩存储算法的实现
问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。基本要求:
1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值; 2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值;
39.算术表达式的求解
问题描述:给定一个算术表达式,通过程序求出最后的结果。基本要求:
1. 从键盘输入要求解的算术表达式; 2. 采用栈结构进行算术表达式的求解过程; 3. 能够判断算术表达式正确与否; 4. 对于错误表达式给出提示; 5. 对于正确的表达式给出最后的结果;
40.实时监控报警系统
问题描述:建立一个报警和出警管理的系统 基本要求:
1.采用一定的存储结构存储报警信息,要求有内容、时间; 2.有一次的出警就应该在待处理的信息中删除这条信息; 3.记录出警信息;
4.待处理信息过多时会发出警告;
41.车厢调度
问题描述:假设停在铁路调度站入口处的车厢序列的编号一次为1,2,3,4。设计一个程序,求出所有可能由此输出的长度为4的车厢序列。
42.迷宫问题(栈)问题描述:
以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。基本要求:
首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向,如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(3,2,3),(3,1,2),…。测试数据:
迷宫的测试数据如下:左下角(1,1)为入口,右下角(8,9)为出口。实现提示:
计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设的迷宫没有通路。
可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。选做内容:
(1)编写递归形式的算法,求得迷宫中所有可能的通路;(2)以方阵形式输出迷宫及其通路。43.迷宫问题(队列)(同上)44二叉搜索树:各种搜索树效率比较 题目要求:
本题目要求对普通的二叉排序树、avl树分别实现制定操作,并分析比较这两种不同数据结构对应的一系列插入和删除操作的效率。要求测试对n个不同整数进行下列操作的效率:(1)按递增顺序插入n个整数,并按同样顺序删除;(2)按递增顺序插入n个整数,并按相反顺序删除;(3)按随机顺序插入n个整数,并按随机顺序删除;
要求n从1000到10000取值,并以数据规模n为横轴,运行时间为纵轴,画出3种不同数据结构对应的操作效率比较图。
45.病毒测试程序 本题的任务是:
当整个网络被感染后,计算有多少台机器被某个特定变种所感染。输入要求:
输入由若干组测试数据组成。
每组数据的第1行包含2个整数m和n(1≤m,n≤500),接下来是一个m*n的矩阵表示网络的初始感染状态,其中的正、负整数的意义如题目描述中所定义。
下面一行给出一个正整数q,是将要查询的变种的个数。接下去的q行里,每行给出一个变种的类型。当m或n为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:
对每一组测试,在一行里输出被某个特定变种所感染的机器数量。
46关键路径问题
问题描述:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。基本要求:
(1)对一个描述工程的aoe网,应判断其是否能够顺利进行。
(2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。
47.神秘国度的爱情故事
输入要求:输入由若干组测试数据组成。
每组数据的第1行包含一正整数n(1≤n≤50000),代表神秘国度中小村的个数,每个小村即从0到n-1编号。接下来有n-1行输入,每行包含一条双向道路的两端小村的编号,中间用空格分开。之后一行包含一正整数m(1≤m≤500000),代表着该组测试问题的个数。接下来m行,每行给出a,b,c三个小村 的编号,中间用空格分开。
当n为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:对每一组测试给定的a,b,c,在一行里输出答案,即:如果c在a和b之间的路径上,输出yes,否则输出no。
48.并查集:检查网络
题目要求:给定一个计算机网络以及机器间的双向连线列表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输。请写出程序判断:任意指定两台计算机,它们之间是否可以进行文件传输?
输入要求:输入若干测试数据组成。对于每一组测试,第1行包含一个整数n(≤10000),即网络中计算机的总台数,因而每台计算机可用1到n之间的一个正整数表示。接下来的几行输入格式为i c1 c2或者 c或者c c1c2或者s,其中c1和c2是两台计算机的序号,i表示在c1和c2间输入一条连线,c表示检查c1和c2间是否可以传输文件,s表示该组测试结束。当n为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:对每一组c开头的测试,检查c1和c2间是否可以传输文件,若可以,则在一行中输出“yes”,否则输出“no”。
当读到s时,检查整个网络。若网络中任意两机器间都可以传输文件,则在一行中输出“the network is connected.”,否则输出“there are k components.”,其中k是网络中连通集的个数。两组测试数据之间请输出一空行分隔。
49.广义表的应用
由于广义表在结构上较线性表复杂得多,因此,广义表的运算也不如线性表简单。本设计要求实现的广义表的建立、查找、输出、取表头和取表尾以及求深度、求逆表等。本设计用一个主控菜单程序控制,共分为6个子系统。(1).建立广义表(2)输出广义表(3)结点的查找(4)求广义表表头(5)求广义表表尾(6)求广义表的深度
50.网络流:宇宙旅行 题目要求:
在走遍了地球上的所有景点以后,旅游狂人开始计划他的宇宙旅行项目。经过谨慎调查,他目前掌握了一张各卫星空间站可以临时容纳的旅客人数列表。但旅客从一个星球飞往另一个星球时,需要在若干卫星空间站临时停靠中转,而这些空间站不能接待任何旅客驻留,旅客必须立刻转乘另一艘飞船离开,所以空间站不能接待超过自己最大容量的旅客流。为了估计预算,现在旅游狂人需要知道终点星球的接待站应该设计多大容量,才能使得每艘飞船在到达时都可以保证让全部旅客下船。输入要求:
输入若干组测试数据组成。
每组测试数据的第1行包含旅行的起点星球和终点星球的名称和一个不超过500的正整数n(n为0标志全部测试结束,不要对该数据做任何处理)。
接下来的n行里,数据格式为:sourcei capacityi,其中sourcei和destinationi是卫星空间站的名称或起点、终点星球的名称,正整数capacityi是飞船从sourcei到destinationi一次能运载的最大旅客流量。每个名称是由a~z之间三个大写字母组成的字符串,例如:zju。
测试数据中不包含任何到达起点星球的信息以及任何从终点星球出发的信息。输出要求:
对每一组测试,在一行里输出终点星球接待站应具有的最小容量,使得每艘飞船在到达时都可以保证让全部旅客下船。
51:算术运算测试
功能要求:该程序用图形界面实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数。
界面要求:用图形界面实现。52:猜数游戏 功能要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。
界面要示:用图形界面实现。
53、学生成绩管理
功能要求:
1)输入十个同学的学号,姓名,四科成绩(应用数学、大学英语、java程序设计、计算机应用基础)
2)计算出平均成绩。以平均成绩降序输出成绩表。3)输出全组各科平均分,最高分和最低分。4)输入姓名查询成绩
界面要示:用图形界面实现。54.矩阵的运算
采用链表表示稀疏矩阵,并实现矩阵的加法,乘法,求逆运算, 要求:要检查有关运算的条件,并对错误的条件产生报警。
55.建立二叉树和线索二叉树
分别用以下方法建立二叉树并用图型显示出来:
用先序遍历的输入序列
用层次遍历的输入序列
用先序和中序遍历的结果
最后对所建立的二叉树进行中序线索化,并对此线索树进行中序遍历(不使用栈)。
56.银行业务模拟:
客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。
银行有两个服务窗口,相应的有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。
57.假设一个宾馆有n个标准的客房,每个标准客房有m个标准间,利用链表、栈或者队列等数据结构设计出具有订房和退房等功能的管理系统。
数据结构考试题目及答案详解 数据结构考试题型篇5
1.排序算法比较
利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并且(1)统计每一种排序上机所花费的时间。
(2)统计在完全正序,完全逆序情况下记录的比较次数和移动次数。(3)比较的指标为关键字的比较次数和记录的移动次数(一次记录交换计为3次移动)。
(4)对结果作简单分析,包括对各组数据得出结果波动大小的解释。2.图的深度遍历
对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用堆栈的五种基本运算(清空堆栈、压栈、弹出、取栈顶元素、判栈空)实现图的深度优先搜索遍历。画出搜索顺序示意图。3.图的广度遍历
对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度优先搜索遍历。画出搜索顺序示意图。4.二叉树的遍历
对任意给定的二叉树(顶点数自定)建立它的二叉链表存贮结构,并利用栈的五种基本运算(置空栈、进栈、出栈、取栈顶元素、判栈空)实现二叉树的先序、中序、后序三种遍历,输出三种遍历的结果。画出搜索顺序示意图。5.链表操作
利用链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。画出搜索顺序示意图。6.一元稀疏多项式简单计数器(1)输入并建立多项式
(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2…,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。(3)多项式a和b相加,建立多项式a+b,输出相加的多项式。(4)多项式a和b相减,建立多项式a-b,输出相减的多项式。用带头结点的单链表存储多项式。测试数据:
(1)(2x+)+(7-5x8+11x9)(2)(6x-3-x+)-(-6x-3++)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)7.实现两个链表的合并 基本功能要求:(1)建立两个链表a和b,链表元素个数分别为m和n个。
(2)假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线性表c,使得:
当m>=n时,c=x1,y1,x2,y2,…xn,yn,…,xm 当n>m时,c=y1,x1,y2,x2,…ym,xm,…,yn 输出线性表c:
(1)用直接插入排序法对c进行升序排序,生成链表d,并输出链表d。测试数据:
(1)a表(30,41,15,12,56,80)
b表(23,56,78,23,12,33,79,90,55)
(2)a表(30,41,15,12,56,80,23,12,34)b表(23,56,78,23,12)8.哈夫曼编码的实现与应用
(1)从文件中读入任意1篇英文短文(至少含3000个字符,文件为ascii编码的文本文件)
(2)统计不同字符在文章中出现的频率(空格、换行、标点等也按字符处理)(3)根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码。
(4)用哈夫曼编码来存储文件,并和输入文本文件大小进行比较,计算文件压缩率
(5)根据相应哈夫曼编码,对编码后的文件进行解码,恢复成ascii编码的英文短文后输出。
分析及设计步骤(供参考)
1.分析问题,给出数学模型,设计相应的数据结构。
1)分析问题特点,用数学表达式或其它形式描述其数学模型。2)选择能够体现问题本身特点的一种或几种逻辑结构。
3)依据逻辑结构和问题特点,设计并选择相应的存储结构(顺序存储结构和链式存储结构对应的算法实现有区别)。
2.算法设计
1)确定所需模块:对于复杂的程序设计,要充分利用模块化程序设计方法和面向对象思想,自顶向下,逐步细化。
2)各子模块功能描述:给出主要模块的算法描述,用流程图或伪代码表示。3)模块之间的调用关系:给出算法各模块之间的关系图示。3.上机实现程序
为提高工作效率,充分利用上机调试时间,在上机之前应列出程序清单。
4.用有代表性的各种测试数据去验证算法及程序的正确性
5.算法分析及优化
经过上机调试,源程序运行正确,并且实现算法要求的功能,解决课程设计题目中给出的问题后,分析算法的时间复杂度和空间复杂度,如有可能对程序进行优化改进。
课程设计报告范例(参考)
约瑟夫环问题。
问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出一个报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,抱m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1起顺序报数;如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,并给出出列人的编号序列。基本要求:
(1)初始报数上限值m和测试数据在程序中确定;(2)用带头结点的单循环链表作数据元素的存储结构;(3)把带头结点的单循环链表作为抽象数据类型设计。测试数据:
n = 7,七个人的密码依次为3,1,7,2,4,8,4 初始报数上限值m = 20 算法思想:
jesephring()函数是实现问题要求的主要函数,其算法思想是:从1至m对带头结点的单循环链表循环计数,到m时,输出该结点的编号值,将该结点的密码作为新的m值,再从该结点的下一个结点起重新自1起循环计数;如此下去,直到单循环链表空时循环过程结束。模块划分:
(1)带头结点的单循环链表抽象数据类型sclinlist,其中包括基本操作的函数有:初始化操作函数、插入一个结点操作函数、删除一个结点操作函数、取一个结点数据操作函数和判表是否非空操作函数。该抽象数据类型文件名为。
(2)void sclldeleteafter(sclnode *p),其功能是删除带头结点的单循环链表中指针p所指结点的下一个结点。这是对带头结点的单循环链表抽象数据类型sclinlist,补充本问题需要的一个操作函数。(3)void jesephring(sclnode *head, int m),其功能是对带头结点的单循环链表head,以m为初始报数上限值实现问题要求。
(4)void main(void),主函数,功能是给出测试数据值,建立测试数据值的带头结点单循环链表,调用jesephring()函数实现问题要求。数据结构:
(1)数据类型datatype定义如下: typedef struct { int number;int cipher;} datatype;
(2)带头结点单循环链表抽象数据类型sclinlist。
(3)带头结点单循环链表抽象数据类型的结点结构定义如下:
typedef struct node { datatype data;struct node *next;} sclnode;源程序:
源程序存放在两个文件中,文件是带头结点单循环链表抽象数据类型,文件是主程序。
文件: typedef struct node { datatype data;struct node *next;} sclnode;/*结点结构定义*/ void scllinitiate(sclnode **head)/*初始化*/ { if((*head =(sclnode *)malloc(sizeof(sclnode)))== null)exit(1);(*head)->next = *head;} int scllinsert(sclnode *head, int i, datatype x)/*插入一个结点*/ { sclnode *p, *q;int j;p = head->next;j = 1;while(p!= head && j < i1 && i!= 1){ printf(“插入位置参数错!”);return 0;} if((q =(sclnode *)malloc(sizeof(sclnode)))== null)exit(1);q->data = x;q->next = p->next;p->next = q;return 1;} int sclldelete(sclnode *head, int i, datatype *x)/*删除一个结点*/ { sclnode *p, *q;int j;p = head;j = 0;while(p->next!= head && j < i1){ printf(“删除位置参数错!”);return 0;} q = p->next;p->next = p->next->next;*x = q->data;free(q);return 1;} int scllget(sclnode *head, int i, datatype *x)/*取一个结点数据元素值*/ { sclnode *p;int j;p = head;j = 0;while(p->next!= head && j < i){ p = p->next;j++;} if(j!= i){ printf(“取元素位置参数错!”);return 0;} *x = p->data;return 1;} int scllnotempty(sclnode *head)/*链表非空否*/ { if(head->next == head)return 0;else return 1;} 文件: #include
#include
typedef struct { int number;int cipher;} datatype;/*定义具体的数据类型datatype*/ #include “” /*包含sclinlist抽象数据类型*/ void sclldeleteafter(sclnode *p)/*删除p指针所指结点的下一个结点*/ { sclnode *q = p->next;p->next = p->next->next;free(q);} void jesephring(sclnode *head, int m)/*对带头结点单循环链表head,初始值为m的约瑟夫环问题函数*/ { sclnode *pre, *curr;int i;pre = head;curr = head->next;while(scllnotempty(head)== 1){ for(i = 1;i < m;i++){ pre = curr;curr = curr->next;if(curr == head){ pre = curr;curr = curr->next;} }
printf(“ %d ”, curr->);m = curr->;curr = curr->next;if(curr == head)curr = curr->next;sclldeleteafter(pre);} } void main(void){ datatype test[7]={{1,3},{2,1},{3,7},{4,2},{5,4},{6,8},{7,4}};int n = 7, m = 20, i;sclnode *head;scllinitiate(&head);/*初始化*/ for(i = 1;i <= n;i++)/*循环插入建立单循环链表链表*/ scllinsert(head, i, test[i-1]);jesephring(head, m);/*约瑟夫环问题函数*/ } 测试情况: 程序输出为: 6 1 4 7 2 3 5各种排序比较结果(参考)
直接插入的比较图表***030002500直接插入的移动图表比较次数2000系列1******4738291100次数移动次数2000系列1******4738291100次数 冒泡的比较次数***00冒泡的移动图表***00比较次数移动次数*********1100执行次数系列*********91100次数系列1
shell的比较次数12001000800***01200shell的移动图表比较次数移动次数******1100执行次数系列******564738291100次数系列1
快速排序的比较次数800700600快速排序的移动图表540520500比较次数移动次数******4738291100执行次数系列******8291100次数简单选择的移动图表350300250系列1
简单选择的比较次数***0比较次数移动次数300025002000******4738291100执行次数堆排序的比较次数107010601050系列1200系列1******8291100次数 堆排序的移动图表***0比较次数移动次数*********00执行次数系列117401720******65564738291100次数系列1
下一篇:一诺千金读后感样例5篇