2010级数据结构实验题目分享
2010河北省数据结构试题及答案

1、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是( B )。
A)9 B)11 C)15 D)不能确定2、采用链结构存储线性表时,其地址( B )。
A)必须是连续的 B)连续不连续都可以C)部分地址必须是连续 D)必须是不连续的3、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( D )存储方式最节省时间。
A)顺序表B)双链表C)带头结点的双循环链表D)单循环链表4、以下属于顺序存储结构优点的是( A )。
A) 存储密度大B) 插入运算方便C)删除运算方便D)可方便地用于各种逻辑结构的存储表示5、( C )在进行插入操作时,常产生假溢出现象。
A)顺序栈 B)循环队列C)顺序队列 D)链队列6、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
A) 单链表 B) 仅有头指针的单循环链表C) 双链表 D) 仅有尾指针的单循环链表7、设一数列的顺序为1,2,3,4,5,6,通过栈结构不可能排成的顺序数列为( B )。
A)3,2,5,6,4,1 B)1,5,4,6,2,3C)2,4,3,5,1,6 D)4,5,3,6,2,18、在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行( A )。
A)q->next=s; s->next=p; B)s->next=p->next; p->next=s;C)p->next=s->next; s->next=p D)p->next=s; s->next=q;9、采用链结构存储线性表时,其地址( B )。
A)必须是连续的 B)连续不连续都可以C)部分地址必须是连续 D)必须是不连续的10、在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶指针,当做出栈处理时,top变化为( C )。
《数据结构》实验题目

通过上机实验加深对课程内容的理解,增加感性认识,提高算法设计、程序编写及调试的能力。
要求所编的程序能正确运行(最好用C++调试),并提交实验报告。
实验题目先由理论课程的教师给学生,实验前学生必须做好准备,实验报告理论教师可以相当于作业登记。
上实验课程的教师督促、监控学生是否自己调试程序,相关情况作为成绩评定的依据。
实习报告规范:实习报告开头有题目,班级,姓名,学号和完成日期,并包括以下七个内容:1. 需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:输入的形式和输入值的范围;输出的形式;程序所能达到的功能;测试数据;2. 概要设计:说明本程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序模块之间的层次关系。
3. 详细设计:对每个操作写出伪码算法;对主程序和其他模块也需要写出伪码算法;画出函数的调用关系图。
提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。
4. 调试分析:调试过程中遇到的问题;算法的时空分析和改进思想;经验和体会。
5. 用户使用说明:说明如何使用你编写的程序,详细列出每一步的操作步骤。
6. 测试结果:列出你的测试的结果,包括输入和输出。
7. 附录:带注释的源程序。
《数据结构》实验题目实验一栈的实现及应用一、实验目的及要求:1、熟悉栈的定义和栈的基本操作。
2、掌握顺序存储栈和链式存储栈的基本操作的具体实现。
3、加深对栈结构的理解,并逐步培养解决实际问题的编程能力二、实验内容说明:以下题目选择其一编程实现,在报告中说明栈实现的方式1.数制转换将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题,用"除B取余法"来解决。
【例】将十进制数13转化为二进制数。
解答:按除2取余法,得到的余数依次是1、0、1、1,则十进制数转化为二进制数为1101。
2.表达式求值(后缀表达式)当用户输入一个合法的后缀表达式后,能够返回正确的结果。
《数据结构》程序设计实习题目

《数据结构》程序设计实习题目1.分别以顺序表和单链表作为存储结构,实现将线性表就地逆置的操作。
(所谓“就地逆置”是指辅助空间为O(1),即利用原表中的结点空间)。
2.写一程序将单链表中值重复的结点删除,使得表中各结点值均不相同。
3.已知一单链表中含有两类字符的数据元素(如:字母、数字),试编写程序将该单链表分成两个单链表,使得每个链表中只含有同一类的字符。
4.假设有两个按元素值递增有序的单链表A和B,试编写程序将A和B归并成一个按元素值递减有序的单链表。
5.利用线性结构(顺序表或链表)实现两个20位大整数的加法运算。
6.已知两个以顺序结构存储的线性表A和B,试编写程序实现从A表中删除包含在B表中的元素。
7.已知两个单链表A和B,试编写程序实现从A表中删除包含在B表中的元素。
8.已知两个以顺序结构存储的线性表A和B,试编写程序实现:将在B表中但不在A表中的元素插入到A表。
9.已知两个单链表A和B,试编写程序实现:将在B表中但不在A表中的元素插入到A表。
10.试编写程序,对任意输入的一个算术表达式,将式中的数字和运算符分成两类(一类是数字,一类是运算符),并按逆序输出。
(提示:利用栈来实现)11.利用栈结构,编写一个程序,对以逆波兰式表示的表达式求值。
12.编写程序,求得所有包含在串S中而不包含在串T中的字符(S中重复的字符只选一个)构成的新串R。
13.编写程序,求任意输入的串S中所含不同字符的总数和每种字符的个数。
14.一个文本串可用事先给定的字母映射表进行加密。
例如:设字母映射表为:a b c d e f g h i j k l m n o p q r s t u v w x y zn g z q t c o b m u h e l k p d a w x f y i v r s j则字符串“encrypt”被加密为“tkzwsdf”。
试写一程序将输入的文本串进行加密后输出。
15.假设两个10×10的稀疏矩阵A和B以三元组表的方式存储,试编写程序实现矩阵的相加运算,其结果存放在三元组表C中。
数据结构实验考试题

第 1 题:报数问题(时间限制为:5000毫秒)5输入:标准输入输出:标准输出描述:n个人围成一个圈,每个人分别标注为1、2、...、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一个人时,该人即为胜利者。
例如当n=10,k=4时,依次出列的人分别为4、8、2、7、3、10,9、1、6、5,则5号位置的人为胜利者。
给定n个人,请你编程计算出最后胜利者标号数。
输入:输入包含若干个用例,每个用例为接受键盘输入的两个数n(1<=n<=1000000), k(1<=k<=50),分别表示总人数及报到出圈数。
输入为“0 0“表示输入用例结束。
输出:每个用例用一行输出最后胜利者的标号数。
输入样例1:1 110 40 0输出样例1:15第2题:成绩统计(顺序线性表)(时间限制为:1000毫秒)描述:根据输入统计学生的平均分及各科平均分。
输入:第一行为学生的个数n及课程数m,第二行至m+1行为课程名,接下来为各学生的姓名及成绩,每个学生的信息占两行,第一行为学生的姓名,第二行为m个实数,表示学生各科成绩。
输出:输出包含2n+2m行,前2n行为学生的平均分,其中第一行为学生姓名,第二行为该生的平均分,后2m行为各课程的平均分,其中第一行为课程名,第二行为对应的平均分。
(保留两位小数)样例输入:3 2englishcomputerzhangshan87.5 98lisi80 78wangwu60 59样例输出:zhangshan92.75lisi79.00wangwu59.50english75.83computer78.33第3题:合并线性表(时间限制为:500毫秒)描述:已知两非递减的顺序线性表,要求合并成一个新的非递减顺序线性表。
输入:输入包含四行,第一行为自然数n,表示第一个非递减顺序线性表的长度,第二行为n个自然数构成的非递减顺序线性表,第三行为自然数m,表示第二个非递减顺序线性表的长度,第四行为m个自然数构成的非递减顺序线性表。
数据结构上机实验题

当涉及数据结构的上机实验题时,通常会涉及编程和算法的实践。
以下是一些可能的
上机实验题目:
1. 实现一个栈(Stack)数据结构,并编写基本的操作(入栈、出栈、获取栈顶元素等)。
2. 实现一个队列(Queue)数据结构,并编写基本的操作(入队、出队等)。
3. 实现一个链表(Linked List)数据结构,并编写插入、删除、查找等操作。
4. 实现一个二叉树(Binary Tree)数据结构,并编写遍历算法(前序、中序、后序遍历)。
5. 实现一个图(Graph)数据结构,并编写基本的图算法(深度优先搜索、广度优先搜索)。
6. 实现一个哈希表(Hash Table)数据结构,并编写插入、删除、查找等操作。
这些实验题目可以帮助学生加深对数据结构的理解,并通过编程实践来掌握数据结构
的基本操作和算法。
同时,这些实验也有助于提高学生的编程能力和解决问题的能力。
10级数据结构实验题目

10级数据结构实验题目一、实验题目1、设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。
2、结合书上第41页的例子(一元多项式相加),采用链式存储结构,将两个线性链表表示的一元多项式相加,并输出。
3、二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。
其中指针lchild和rchild的类型为bitre。
静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。
所不同的是,lchild和rdhild 为integer型,分别用于存储左右孩子的下标,如果没有左右孩子,则相应的值为0。
例如,二叉树的静态二叉链表如上图所示。
编写算法由二叉树的动态二叉链表构造出相应的静态二叉链表a[1..n],并写出其调用形式和有关的类型描述。
其中n为一个确定的整数。
4、设无向图G有n个点e条边,编写算法建立G的邻接表,并按照深度优先搜索输出顶点,要求该算法时间复杂性为O(n+e),且除邻接多表本身所占空间之外只用O(1)辅助空间。
5、二叉排序树采用二叉链表存储。
写一个算法,删除结点值是X的结点。
要求删除该结点后,此树仍然是一棵二叉排序树,并且高度没有增长(注:可不考虑被删除的结点是根的情况)。
4 #include "stdafx.h"#include<stdio.h>#include<stdlib.h>#define MAX_VERTEX_NUM 10typedef int ARC_INFO_TYPE; //弧相关信息类型typedef char VERTEX_TYPE; //结点信息类型typedef enum{UDG, DG}GRAPH_TYPE; //图的类型:无向,有向图 //弧结点(表结点)typedef struct ArcNode{int num; //结点编号ARC_INFO_TYPE* info;//弧的其他相关信息,如权值等等struct ArcNode* nextArcNode;//指向下一个表结点的指针}ArcNode;//顶点(头节点)typedef struct VNode{VERTEX_TYPE data;//顶点的数据ArcNode* firstArcNode;//指向第一个弧结点的指针}VNode, AdjList[MAX_VERTEX_NUM];//邻接表//整个图的信息typedef struct ALGraph{int vertexNum;//结点个数int arcNum;//边或者弧个数GRAPH_TYPE kind;}ALGraph;//定义全局变量,便于操作ALGraph Graph;AdjList adjList;//辅助数组,记录每个顶点是否被访问过int visited[MAX_VERTEX_NUM];//创建一个图int CreateALGraph(void){int i;int v1,v2;//暂时存放两个相关联点的编号ArcNode* p=NULL;printf("输入结点个数,边数,图类型:\n");scanf("%d,%d,%d",&Graph.vertexNum,&Graph.arcNum,&Graph.kind); fflush(stdin); //注意:清除缓冲区的残余输入流,这里清除回车后留下的'\r' and'\n'之一,否则下面的输入出错printf("输入顶点的数据:\n");for(i = 0; i < Graph.vertexNum; ++i){ //初始化各个顶点(头节点)scanf("%c",&adjList[i].data);adjList[i].firstArcNode = NULL;}printf("输入相关联的边:\n");for(i = 0 ; i < Graph.arcNum; ++i){ //输入所有边(关联的点)编号scanf("%d,%d",&v1,&v2);p = (ArcNode*)malloc(sizeof(ArcNode));p->num = v2; (按照有向图处理,所以不是v1)p->nextArcNode = adjList[v1].firstArcNode;adjList[v1].firstArcNode = p;if(!Graph.kind){ //若为无向图(无向图在有向图的基础上多添加e个结点得到)p = (ArcNode*)malloc(sizeof(ArcNode));p->num = v1;p->nextArcNode = adjList[v2].firstArcNode;adjList[v2].firstArcNode = p;}}return 1;}//查找顶点v的第一个邻接点int FirstAdjVex(int v){if(adjList[v].firstArcNode)return adjList[v].firstArcNode->num;elsereturn -1;//对于有向图中出度为0的顶点建立邻接表时不存在邻接点 }//查找顶点v的下一个未被访问的邻接点int NextAdjVex(int v, int lastV){ArcNode* p;p = adjList[v].firstArcNode;while(p){if(!visited[p->num] && p->num!=lastV)return p->num;elsep = p->nextArcNode;}if(!p)return -1; //没有找到一个未被访问的邻接点}//对某一个节点作为始点的深度遍历算法int DFS(int v){int w;visited[v] = 1; //已经被访问过printf("%c",adjList[v].data);//输出顶点值for(w = FirstAdjVer(v); w >= 0; w = NextAdjVer(v,w)) //for循环为了递归返回的时候访问那些没有被访问的邻接点if(!visited[w])DFS(w);return 1;}//对整个图的深度遍历算法DFSint DFSGraph(void){int i;//初始化辅助数组for(i = 0; i < Graph.vertexNum; ++i)visited[i] = 0;//对每一个没有被访问的邻接点深度遍历for(i = 0; i < Graph.vertexNum; ++i)if(!visited[i])DFS(i);return 1;}//主函数测试int main(void){printf("创建以邻接表为存储结构的无向图........\n");CreateALGraph();printf("深度优先搜索遍历图:\n");DFSGraph();system("pause");return 0;}//测试数据:【解答5】typedef struct BSTNode{keytype key;struct BSTNode *lchild;struct BSTNode *rchild;}BSTNode,*BSTree;bool DeleteBSTNode(BSTree& root,keytype x){//在BST树中查找关键字为x的结点,找到后删除之BSTNode *T=root;while(T!=NULL){if(T->key>x) //转左子树T=T->lchild;else if(T->key<x) //转右子树T=T->rchild;else { Delete(T); return true; }//找到关键字为x的结点,删除之}return false; //BST树中没有此结点,报错}void Delete(BSTree& p){//从BST树中删除结点p,将结点p的中序直接前驱pre 放置到p的位置if(!p->rchlid){ //右子树空则只需重接它的左子树q=p; p=p->lchild; free(q);}esle if (!p->lchild){ //左子树空则只需重接它的右子树q=p; p=p->rchlid; free(q);}else{ //左右子树均不空,找p的中序直接前驱pre,用pre代替pq=p; pre=p->lchild; //q为pre的父结点while(pre->rchild){ //p的中序直接前驱pre是p的左孩子结点的最右端结点q=pre; pre=pre->rchild;}p->data=pre->data;//删除pre,这里只需重接pre的父结点的左右子树即可if(q!=p) q->rchild=pre->lchild; //重接q的右子树else q->lchild=pre->lchild; //重接q的左子树}//end else}//end Delete二、实验报告填写要求1、实验报告开头写明实验日期和实验题目2、中间部分写上算法3、最后写上实验结果。
数据结构实习报告题目

一、实习背景与目的随着信息技术的飞速发展,数据结构作为计算机科学的核心基础之一,在软件开发和数据处理中扮演着至关重要的角色。
为了提高自身对数据结构应用的理解和掌握,本次实习旨在通过设计和实现一个基于链表与树结构的多功能数据管理系统,提升对数据结构理论知识的实践运用能力,并增强系统分析与设计的能力。
二、需求分析1. 程序所实现的功能:(1)实现链表的基本操作,如插入、删除、查找等;(2)实现二叉树的基本操作,如插入、删除、查找等;(3)实现数据管理系统,包括数据的存储、查询、修改、删除等;(4)实现用户界面,方便用户进行操作。
2. 程序的输入:(1)输入数据格式:链表数据以空格分隔,二叉树数据以括号表示,节点间用逗号分隔;(2)输入说明:用户需按照要求输入数据,系统将自动处理。
3. 程序的输出:(1)输出格式:链表、二叉树以文本形式输出;(2)输出说明:系统将按照用户操作要求,实时显示操作结果。
4. 测试数据:(1)链表测试数据:1 2 3 4 5;(2)二叉树测试数据:(1,2,(3,4,5),6)。
5. 合作人及其分工:(1)负责人:负责整体设计和开发;(2)成员1:负责链表和二叉树的基本操作实现;(3)成员2:负责数据管理系统的设计和实现;(4)成员3:负责用户界面设计和实现。
三、设计说明1. 主要的数据结构设计说明:(1)链表:采用单向链表实现,节点包含数据域和指针域;(2)二叉树:采用二叉搜索树实现,节点包含数据域和左右指针域。
2. 程序的主要流程图:(1)用户输入数据;(2)系统解析数据并创建链表和二叉树;(3)用户选择操作,系统根据操作进行相应处理;(4)系统输出操作结果。
3. 程序的主要模块:(1)链表模块:负责链表的基本操作;(2)二叉树模块:负责二叉树的基本操作;(3)数据管理系统模块:负责数据的存储、查询、修改、删除等;(4)用户界面模块:负责用户与系统的交互。
4. 程序的主要函数及其伪代码说明:(1)链表插入:function insertNode(head, data)(2)链表删除:function deleteNode(head, data)(3)二叉树插入:function insertNode(root, data)(4)二叉树删除:function deleteNode(root, data)5. 合作人设计分工:(1)负责人:负责整体设计和开发;(2)成员1:负责链表和二叉树的基本操作实现;(3)成员2:负责数据管理系统的设计和实现;(4)成员3:负责用户界面设计和实现。
数据结构真题及答案(2010)

杭州电子科技大学2010《数据结构》真题及解析一、是非题(每小题2分,共20分)1.线性表的顺序存储结构优于链式存储结构。
2.栈和队列也是线性表。
如果需要,可对它们中的任一元素进行操作。
3.非空广义表的表头和表尾都有可能是原子或广义表。
4.在二叉树的先序遍历序列中,任意-个结点均处在其孩子结点的前面。
5.通常,在二叉树的第i层上有2^i-1个结点。
6.二叉树按某种次序线索化后,任一结点均有指向其前驱和后继的线索指针。
6.赫夫曼树中的结点个数一定是奇数。
8.用邻接矩阵(数组表示法)存储一个图时,所需的存储空间大小与图的边数无关。
9.对于一棵m阶的B-树而言.树中每个结点至多有m个关键字,除根之外的所有非终端结点至少有┌m/2┐个关键字。
10.对于任何待排序序列来说,快速排序均快于冒泡排序。
二、选择题(每小题2分,共20分)1.递归过程可借助于_____转化为非递归过程。
A:线性表 B:队列 C:栈 D:数组2.循环队列用数组A[0..m-1]存放其元素值,设头尾游标分别为front(队头元素的位置)和rear(队尾元素的位置),则当前队列中的元素个数是_______。
A: rear-front B: rear-front+1C: (rear-front+m)%m D: (rear-front+1+m)%m3.对广义表A=((a, (6)),(c,()),d)执行操作gettail(gethead(gettail (A)))的结果是:________。
A:() B:(()) C:d D:(d)4.对二叉排序树______可得到有序序列。
A:按层遍历 B:前序遍历C:中序遍历 D:后序遍历5.在有n个结点的二叉树的二叉链表表示中,空指针数为________。
A:不定 B: n+1 C:n D:n-16.图示的三棵二叉树中_____为最优二叉树。
A: B: C:7.设无向图G=(V,E)和G=(V′,E′),若G′是G的生成树,则下面不正确的说法是_________。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010级数据结构实验题目
一.实验题目
1.设有两个无头结点的单链表,头指针分别为ha,hb。
链中有数据域data,链域next。
两链
表的数据都按递增序存放。
现要求将hb表归到ha表中,且归并后ha仍递增,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。
2.结合书上第41页的例子(一元多项式相加),采用链式存储结构,将两个线性表表示的
一元多项式相加,并输出。
3.二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。
其中指针lchild
和rchild的类型为bitre。
静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。
有所不同的是lchild和rchild为integer 型,分别用于存储左右孩子的下标,如果没有左右孩子,则相应的值为0。
例如,二叉树的静态二叉链表如下图所示。
编写算法由二叉树的动态二叉链表构造出相应的静态二叉链表a[1…n],并写出其调用形式和有关的类型描述。
其中n为一个确定的整数。
4.设无向图G有n个点e条边,编写算法建立G的邻接表,并按照深度优先搜索输出顶
点,要求该算法时间复杂性为O(n+e),且除邻接多表本身所占空间之外只用O(1)辅助空间。
5.二叉排序树采用二叉链表储存。
写一个算法,删除结点值是X的结点。
要求删除该结点
后,此树仍是一颗二叉排序树,并且高度没有增长(注:可不考虑被删除结点是根的情况)。
二.实验报告填写要求
1.实验报告开头写明实验日期和实验题目
2.中间部分写上实验算法
3.最后写上实验结果。