数据结构上机实验要求
数据结构上机考试题目及要求

数据结构上机实验考试标准一、评分标准:1.根据考试完成情况,参考平时上机情况评定优、良、中、及格、不及格5个档。
2.成绩分布比例近似为:优15%、良30%、中30%、及格20%、不及格<10%二、评分原则:1.充分参考平时实验完成情况,结合如下原则给出成绩;2.只完成第一题,成绩为良以下成绩(中、及格),若平时上机情况很好,可以考虑良好;3.两道题都完成,成绩为良及以上(优、良),根据完成质量和完成时间给成绩;4.如未完成任何程序,则不及格(根据平时成绩将不及格率控制在10%以下);三、监考要求:1.考试前,要求学生检查电脑是否工作正常,如果不正常及时解决,待所有考生均可正常考试后再发布试题。
2.平时上机完成的程序可以在考试过程直接调用,在考试开始前复制到硬盘当中,考试过程中可以看教材。
3.考试开始后向学生分发考题的电子文档,同时宣读试题,学生可以通过网络或磁盘拷贝试题。
4.考试开始十五分钟之后把网络断开,学生不得再使用任何形式的磁盘。
5.程序检查时,记录其完成时间和完成情况。
除检查执行情况外,还要求学生对代码进行简要讲解,核实其对代码的理解情况和设计思想,两项均合格方视为试题完成。
6.完成考试的学生须关闭电脑立刻离开考场,考试成绩由教务办统一公布,负责教师不在考试现场公布成绩。
数据结构上机实验考试题目(2011年12月23日)题目1.设C={a1,b1,a2,b2,…,a n,b n}为一线性表,采用带头结点的单链表hc(hc为C链表的头指针)存放,设计一个算法,将其拆分为两个线性表(它们都用带头结点的单链表存放),使得:A={a1,a2,…,a n},B={b n,b n-1,…,b1}。
[例] C链表为:C={1,2,3,4,5,6,7,8,9,10}拆分后的A、B链表如下:A={1,3,5,7,9},B={10,8,6,4,2}。
要求:算法的空间复杂度为O(1)。
即利用C链表原来的空间。
数据结构上机实验报告

else insert(lc,i/2,la.list[i]); //偶数位次元素插入lc
}
printf("\n您输入的线性表元素为:\n\n");
print(la);
printf("线性表的奇数位次的元素为:\n\n");
print(lb);
printf("线性表的偶数位次的元素为:\n\n");
print(lc);
}
void initial(sqlist &v)
{printf(" ****本程序可以实现线性表奇偶位序的元素分别输出****\n\n\n");
int i,a;
printf("请输入一个偶数作为线性表的长度:\n\n");
void initlist(sqlist &);
void print(sqlist); //输出线性表
void main()
{printf(" *****************本程序可以实现线性表的复制******************\n");
sqlist la,lb; //声明线性表
initial(la);
【程序设计细想】:
建立三个线性表la,lb,lc,对线性表la进行输入,然后利用循环结构对la中奇数位序的元素对lb进行插入操作,对偶数位序的元素对lc进行插入操作,从而得到线性表lb和lc。
【程序代码】:
#include<stdio.h>
#include<malloc.h>
数据结构上机操作实验报告

实验一单链表的基本操作(必做)一、实验目的1.掌握单链表的存储、初始化、插入、删除等操作的程序实现。
2.加深对单链表基本概念,基本理论及相应算法的掌握与理解。
3.了解链表的处理方式,学习体会简单的单链表程序实现相关知识。
二、实验内容1.建立一个链表、设计链表的基本操作实现算法、输出一个链表表,调试并输出结果。
2.编写一个程序实现如下功能:让计算机产生出50个0~9之间的随机数并依次保存到单链表中;输出遍历单链表;从单链表中删除与给定值相等的所有结点;输出遍历单链表;输出单链表长度,调试并输出结果。
三、实验步骤1.定义一个链表结构体。
2.利用插入功能插入一个结点。
3.利用删除功能删除一个结点。
四、程序运行测试1.利用插入功能插入一个结点。
2.利用删除功能删除一个结点。
五、实验报告要求1.绘制链表操作实现的流程图。
2.详细给出程序运行测试结果(包括测试数据和测试结果)。
3.选试验步骤2-3中的任意一个,给出程序的详细注释。
4.参考程序中某一部分功能的改进(选做)5.实验心得与体会6.附录,实验用源程序六、参考源代码#include <iostream.h>#include <malloc.h>typedef struct LNode{int data;struct LNode *next;}Lnode, *LinkList;//假设下面的单链表均为带头结点。
void CreatLinkList(LinkList &L,int j){//建立一个单链表L,数据为整数,数据由键盘随机输入。
LinkList p,q;L=(LinkList )malloc(sizeof(Lnode));L->next=NULL;q=L;cout<<"在单链表内输入整数:"<<endl;for(int i=0;i<j;i++) p=(LinkList)malloc(sizeof(Lnode)); cin>>p->data;p->next=q->next;q->next=p;q=p; }int PrintLinkList(LinkList &L){//输出单链表L的数据元素LinkList p;p=L->next;if(L->next==NULL){cout<<"链表没有元素!"<<endl;return 0;}cout<<"单链表的数据元素为:";while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;return 1;}void LinkListLengh(LinkList &L){//计算单链表L的数据元素个数。
江苏大学数据结构上机实验报告

上机实验报告课程名称:数据结构A 实验题目:二叉树操作专业班级:计算机1501 学号:3150602020 姓名:经普杰完成日期:2016.11.1 成绩:实验内容、目的和要求(一)实验内容二叉树的建立和遍历。
(二)实验目的1.进一步掌握指针变量的使用。
2.掌握二叉树的结构特征以及各种存储结构的特点及使用范围。
3.掌握用指针类型描述、访问和处理二叉树的运算。
4.掌握栈或队列的使用。
(三)实验要求本实验要求实现以下功能:1.按前序次序建立一棵二叉树,以‘#’表示空。
2.中序、后序遍历该二叉树,输出遍历序列。
3.求出该二叉树的深度并输出,或求出该二叉树的叶子数目并输出。
4.试以栈为辅助存储结构实现二叉树的前序非递归算法或以队列为辅助存储结构实现二叉树的层次遍历算法。
程序中使用的数据结构及符号说明主要使用了While循环语句for循环语句二叉树链表的建立对二叉树的遍历计算二叉树的高度计算叶子节点的数量程序的主要流程图程序主要模块的功能说明本程序分为四个类建立,分别为node类,linkqueue类,bintreenode类,bintreelink类四个类中node类:定义一个普通节点类,用于构建队列类Linkqueue类:这是一个队列类,用于进行二叉链表的层次遍历,将二叉链表中的数据入队再出队以达到层次遍历的目的。
Bintreenode类:是建立一个二叉链表节点类,建立这样一个类,组成二叉链表。
即二叉链表是由多个二叉链表类节点组合而成的。
这个类中应包括,二叉树中的一个节点的全部内容,包括数据data,左子树leftchild,右子树rightchild,其中操作是对bintreenode进行初始化。
Bintreelink类:是整个程序的主要部分,这是一个二叉链表类,这个类由多个二叉链表类节点组成,这个链表即为二叉树的体现,在这个类中,包括对二叉树的操作。
首先,定义数据成员:二叉树根节点。
包括一系类对二叉链表的操作的函数成员:preorder(先序遍历)inorder (中序遍历),postorder(后续遍历),levelorder(层次遍历)height求二叉树的高度,leaf 求二叉树叶子节点数。
《数据结构》实验要求与规范

《数据结构》实验要求与规范【基本要求】1.正确实现所要求的功能,按时提交实验报告。
2.实验报告内容应依次包括:⑴实验目的;⑵实验内容与要求;⑶数据结构设计;⑷算法设计;⑸测试结果;⑹心得体会。
3.程序用C语言或C++语言实现。
4.在包含主函数的程序文件起始处添加包含如下内容的注释:所引用代码和资料的出处、设计本程序时谁在哪些地方帮助过你。
5.在程序文件起始处添加包含如下内容的注释:文件名称、创建者姓名班级学号、创建时间、最后修改时间、文件中所定义的函数的名称和主要功能、文件中所定义的全局变量的变量名和主要功能、文件中用到的他处定义的全局变量及其出处、与其他文件的依赖关系。
6.对每个函数添加包含如下内容的注释:函数名称、函数主要功能、函数调用之前的预备条件、函数的输入参数、函数的输出参数、函数的返回值、该函数与其它函数的调用和被调用关系。
// 、姓名:陈明琨班级:计科4班学号12 参考数据结构课本及部分网络文库实验二顺序表的实现和应用实验目的:⑴熟悉线性表的定义和基本操作;⑵掌握线性表的顺序存储结构设计与基本操作的实现。
实验内容与要求:⑴定义线性表的顺序存储表示;⑵基于所设计的存储结构实现线性表的基本操作;⑶编写一个主程序对所实现的线性表进行测试;⑷线性表的应用:①设线性表L1和L2分别代表集合A和B,试设计算法求A和B的并集C,并用线性表L3代表集合C;②(选做)设线性表L1和L2中的数据元素为整数,且均已按值非递减有序排列,试设计算法对L1和L2进行合并,用线性表L3保存合并结果,要求L3中的数据元素也按值非递减有序排列。
实验三、四链表的实现和应用实验目的:掌握线性表的链式存储结构设计与基本操作的实现。
实验内容与要求:⑴定义线性表的链式存储表示;⑵基于所设计的存储结构实现线性表的基本操作;⑶编写一个主程序对所实现的线性表进行测试;⑷线性表的应用:①设线性表L1和L2分别代表集合A和B,试设计算法求A和B的并集C,并用线性表L3代表集合C;②设线性表L1和L2中的数据元素为整数,且均已按值非递减有序排列,试设计算法对L1和L2进行合并,用线性表L3保存合并结果,要求L3中的数据元素也按值非递减有序排列。
〈数据结构〉上机实验指导

〈数据结构〉上机实验指导数据结构是计算机科学中的一门重要课程,它研究的是数据的组织、存储和管理方式,以及对数据进行操作和处理的算法。
上机实验是数据结构课程的重要组成部分,通过实践操作,能够更好地理解和掌握数据结构的基本概念、算法和应用。
在进行〈数据结构〉上机实验之前,首先需要准备实验环境。
通常情况下,我们会使用一种编程语言来实现数据结构的相关操作,比如C++、Java等。
根据自己的实际情况和实验要求,选择一种合适的编程语言,并确保在实验环境中已经正确安装了相应的编译器或解释器。
接下来,我们可以开始进行具体的上机实验了。
下面以链表为例,介绍一下〈数据结构〉上机实验的指导步骤和要求:1. 实验目的:掌握链表的基本概念、操作和应用,理解链表与数组的区别和联系。
2. 实验原理:链表是一种动态数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。
链表的特点是插入和删除操作的时间复杂度为O(1),但是查找操作的时间复杂度为O(n)。
3. 实验步骤:3.1 创建链表:首先,我们需要定义一个链表的结构体,包含数据和指针两个成员变量。
然后,通过动态内存分配来创建链表的节点,并将节点之间通过指针连接起来,形成一个完整的链表。
3.2 插入节点:可以在链表的任意位置插入一个新的节点。
插入节点的操作包括:创建一个新的节点,将新节点的指针指向插入位置的下一个节点,将插入位置的前一个节点的指针指向新节点。
3.3 删除节点:可以删除链表中的任意一个节点。
删除节点的操作包括:将要删除的节点的前一个节点的指针指向要删除的节点的下一个节点,然后释放要删除的节点的内存空间。
3.4 遍历链表:可以通过遍历链表来访问链表中的每一个节点,并对节点进行相应的操作。
遍历链表的操作包括:从链表的头节点开始,依次访问每个节点,直到链表的尾节点。
3.5 查找节点:可以根据节点的值来查找链表中的某一个节点。
查找节点的操作包括:从链表的头节点开始,依次比较每个节点的值,直到找到目标节点或者链表结束。
数据结构上机实验指导
《数据结构》课程上机实验指导书实验一【实验名称】顺序表的基本算法【实验目的】创建一个顺序表,掌握线性表顺序存储的特点。
设计和验证顺序表的查找、插入、删除算法。
【实验要求】(1)从键盘读入一组整数,按输入顺序形成顺序表。
并将创建好的顺序表元素依次打印在屏幕上。
(2)设计一个带选择菜单的主函数,菜单中具备任意选择删除、插入、查找数据元素的功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置或元素值,按指定方式删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号。
(4)每种操作结束后,都能在屏幕上打印出此时顺序表元素的遍历结果。
【实验步骤】1、实验前先写好算法。
2、上机编写程序。
3、编译。
4、调试。
例程:书上参考算法2-1,2-4,2-5,2-6,2-8!带菜单的主函数参考书上综合实例!注意:顺序表的结构体!typedef struct{datatype items[listsize];int length;}SpList;实验二【实验名称】单链表的基本算法【实验目的】创建一个单链表,掌握线性表链式存储的特点。
设计和验证链表的查找、插入、删除、求表长的算法。
【实验要求】(1)从键盘读入一组整数,按输入顺序形成单链表。
并将创建好的单链表元素依次打印在屏幕上。
(注意:选择头插法或者尾插法!)(2)设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找数据元素,和求单链表表长等几项功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置,按指定位置删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号;当选择求表长功能时,返回该单链表表长的数值。
(4)每种操作结束后,都能在屏幕上打印出此时单链表元素的遍历结果。
【实验步骤】1、实验前先写好算法。
数据结构上机实验报告
数据结构上机实验报告学院:电子工程学院专业:信息对抗技术姓名:学号:教师:饶鲜日期:目录实验一线性表 ........................................................................................................ - 4 -一、实验目的.................................................................................................... - 4 -二、实验代码.................................................................................................... - 4 -三、实验结果.................................................................................................. - 14 -四、个人思路.................................................................................................. - 15 - 实验二栈和队列 .................................................................................................. - 15 -一、实验目的.................................................................................................. - 15 -二、实验代码.................................................................................................. - 16 -三、实验结果.................................................................................................. - 24 -四、个人思路.................................................................................................. - 25 - 实验三数组 .......................................................................................................... - 26 -一、实验目的.................................................................................................. - 26 -二、实验代码.................................................................................................. - 26 -三、实验结果.................................................................................................. - 28 -四、个人思路.................................................................................................. - 28 - 实验四树 .............................................................................................................. - 29 -一、实验目的.................................................................................................. - 29 -二、实验代码.................................................................................................. - 29 -三、实验结果.................................................................................................. - 39 -四、个人思路.................................................................................................. - 39 -实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验代码1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
《数据结构》上机实验的目的和要求
《数据结构》上机实验的目的和要求
通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程序的能力。
要求所编的程序能正确运行,并提交实验报告。
实验报告的基本要求为:
1、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:
(1)输入的形式和输出值的范围;
(2)输出的形式;
(3)程序所能达到的功能;
(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
2、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。
4、调试分析:
(1)调试过程中所遇到的问题及解决方法;
(2)算法的时空分析;
(3)经验与体会。
5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。
6、测试结果:列出对于给定的输入所产生的输出结果。
若有可能,测试随输入规模的
增长所用算法的实际运行时间的变化。
数据结构上机实验报告
数据结构上机实验报告数据结构上机实验报告1. 实验目的数据结构是计算机科学中非常重要的一门课程,通过本次上机实验,旨在帮助学生巩固和应用所学的数据结构知识,培养学生分析和解决实际问题的能力。
2. 实验背景本次实验涉及到两个常用的数据结构:栈和队列。
栈是一种后进先出(Last In First Out,LIFO)的数据结构,而队列是一种先进先出(First In First Out,FIFO)的数据结构。
通过实验,我们将学习如何使用这两种数据结构来解决实际问题。
3. 实验内容本次实验分为两个部分:栈的应用和队列的应用。
3.1 栈的应用在栈的应用部分,我们将实现一个简单的括号匹配算法。
该算法可以判断一个字符串中的括号是否匹配。
具体实现步骤如下:3.1.1 创建一个栈来存储括号字符;3.1.2 遍历字符串中的每个字符;3.1.3 如果遇到左括号,则将其入栈;3.1.4 如果遇到右括号,则判断栈顶元素是否是对应的左括号;3.1.5 如果栈为空或栈顶元素不是对应的左括号,则括号不匹配;3.1.6 如果栈顶元素是对应的左括号,则将其出栈;3.1.7 遍历完字符串后,如果栈为空,则括号匹配,否则括号不匹配。
通过实现这个算法,我们可以学习到如何使用栈来解决实际问题,并且理解栈的后进先出的特性。
3.2 队列的应用在队列的应用部分,我们将实现一个简单的任务调度算法。
该算法可以模拟多个任务按照一定的优先级进行调度的过程。
具体实现步骤如下:3.2.1 创建一个队列来存储任务;3.2.2 每个任务包含两个属性:任务名称和优先级;3.2.3 向队列中添加任务,并按照优先级进行排序;3.2.4 从队列中取出优先级最高的任务,并执行;3.2.5 执行完任务后,继续从队列中取出下一个优先级最高的任务,并执行,直到队列为空。
通过实现这个算法,我们可以学习到如何使用队列来实现任务调度,并且理解队列的先进先出的特性。
4. 实验结果与分析通过实验,我们成功实现了括号匹配算法和任务调度算法,并得到了正确的结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//主函数 void main() { char a[40]; char b[40]; cout<<"请输入一个以“@”结束字符的中缀表 达式:"<<endl; cin.getline(a,sizeof(a)); // cout<<a<<endl; Change (a,b); cout<<"对应的后缀表达式为:"<<endl; cout<<b<<endl;
上机实验内容
实验一 实验二 实验三 实验四 实验五 搜索 实验六
约瑟夫环问题 数制转换 矩阵的转置 创建二叉树,遍历,打印 创建图,深度优先和广度优先 排序
实验一约瑟夫环问题
编写一个算法,使用带表头附加节点的循环 单链表解决约瑟夫(Josephus)问题。 其问题是:设有n个人围坐在一张圆桌周围 (假定每个人的编号依次为1,2,...n),先从 某个编号为s的人开始从1报数,数到m的人出 列(即离开坐位,不参加以后的报数),接 着从出列的下一个人开始重新从1报数,数到 m的人又出列,如此下去直到所有人都出列 为止,试求出它们的出列次序。
六、附录源程序
完整的源程序代码。
#include <iostream.h> #include <stdlib.h> #include <strstrea.h> //定义栈 const int StackMaxSize=40; int isdigit(char ch) { if(ch>='0' && ch<='9') return(1); else return(0); }
struct Stack { char stact[StackMaxSize]; int top; }; void InitStack(Stack & S) { S.top=-1; }
int StackEmpty(Stack & S) { return S.top=-1; }
char Peek(Stack & S) { if(S.top==-1) { cerr<<"错误,空的!"<<endl; exit(1); } return S.stact[S.top]; }
while(ch!='@') { //cout<<"ch="<<ch<<endl; if(ch==' ') ch=s1[++i]; else if (ch=='(') { Push (R,ch); ch=s1[++i]; } else if (ch==')') { while (Peek(R)!='(') s2[j++]=Pop(R); Pop(R); ch=s1[++i]; }
void Push(Stack & S,const char & item) { if(S.top==StackMaxSize-1) { cerr<<"错误,满的!"<<endl; exit(1); } S.top++; S.stact[S.top]=item; } char Pop(Stack & S) { if(S.top==-1) { cerr<<"错误,空的!"<<endl; exit(1); } char temp=S.stact[S.top]; S.top--; return temp; }
else
{ //数字 while(isdigit(ch)||ch=='.') { s2[j++]=ch; ch=s1[++i]; } s2[j++]=' '; }
}
ch=Pop(R); while(ch!='@') { if (ch=='(') { cerr<<"错误"<<endl; exit(1); } else { s2[j++]=ch; ch=Pop(R); } } s2[j++]='@'; s2[j++]='\0'; }
实验二数制转换
编写一个算法,将一个十进制的正整数 X转换成r(r=2-9)进制数,并输出转 换后的值。 利用顺序栈实现
实验报告要求
一. 二.
三.
四. 五. 六.
实验目的 实验内容 算法设计思想 测试与运行结果 实验体会(难点及解决方法) 附录源程序
实验一 约瑟夫环
一. 二.
三.
四. 五. 六.
}
//定义函数 int Precedence(char op) { switch(op) { case'+': case'-': return 1; case'*': case'/': return 2; case'(': case'@': default: return 0; } }
void Change(char *s1,char *s2) { Stack R; InitStack(R); Push(R,'@'); int i,j; i=0; j=0; char ch=s1[i];
实验目的 实验内容 算法设计思想 测试与运行结果 实验体会(难点及解决方法) 附录源程序
一、实验目的
掌握线性表的定义及存储表示 掌握循环链表的使用
二、实验内容及要求
编写一个算法,使用带表头附加节点的循环 单链表解决约瑟夫(Josephus)问题。 其问题是:设有n个人围坐在一张圆桌周围 (假定每个人的编号依次为1,2,...n),先从 某个编号为s的人开始从1报数,数到m的人出 列(即离开坐位,不参加以后的报数),接 着从出列的下一个人开始重新从1报数,数到 m的人又出列,如此下去直到所有人都出列 为止,试求出它们的出列次序。Leabharlann 三、算法设计思想
数据结构的表示(逻辑结构、存储结构) 各函数功能及算法设计思想 函数的调用关系
四、测试与运行结果
(输入你自己的测试结果,每位同学应 该不一样) 至少输入两组测试数据
五、实训体会(难点及解决方法)
在调试程序的过程中遇到什么问题?是 如何解决的? 答:… 通过做本次实验,你有什么收获? 答:… 你有什么建议或心得体会?
else if (ch=='+'||ch=='-'||ch=='*'||ch=='/') { char w=Peek(R); while (Precedence(w)>=Precedence(ch)) { //Precedence(w)为运算符的优 先级 s2[j++]=w; Pop(R); w=Peek(R); } Push(R,ch); ch=s1[++i]; }