2008年中山大学872数据结构考研试题

2008年中山大学872数据结构考研试题
2008年中山大学872数据结构考研试题

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

栈与队列数据结构实验

浦江移动网络学院 实验报告书 课程名:《数据结构》 题目:线性数据结构实验 班级: 学号: 姓名:

线性表算法实现与应用报告要求 1目的与要求: 1)掌握栈与队列的数据类型描述及特点; 2)掌握栈的顺序和链式存储存表示与基本算法的实现; 3)掌握队列的链式和循环存储表示与基本操作算法实现; 4) 掌握栈与队列在实际问题中的应用和基本编程技巧; 5)按照实验题目要求,独立完成实际程序的编写编写、调试和运行,并通过用例数的运行过程抓获相关屏面验证程序设计的正确性; 7)认真书写实验报告,并在下周一以前按时提交。 2 实验内容或题目 (一)必做题: 1、实现顺序栈的创建(初始化)、压入(插入)、弹出(删除)操作,要求给出栈的操作变化过 程; 2、实现链栈的创建(初始化)、压入(插入)、弹出(删除)操作,要求给出栈的操作变化过程; 3、实现循环队列的创建、进队、出队等基本操作,并实时给出队列的操作变化状态; 4、实现链式队列的创建、进队、出队等基本操作,并实时给出队列的操作变化状态; (二)选做题(有能力同学建议多做此类应用题目): 1、实现表达式求值算法; 2、用递归算法实现汉诺塔问题; 3、使用循环队列实现打印杨辉三角形算法。 3 实验步骤与源程序 第一题 #define TRUE 1 #define FALSE 0 #define Stack_Size 50 #include using namespace std; typedef struct { int elem[Stack_Size]; int top; }SeqStack; void InitStack(SeqStack *S) {

中山大学研究生入学考试数据结构1997真题

中山大学九七年数据结构考研 一、(10分)解释下列名词: (1)二叉排序树(binary sort tree); (2)关键路径(critical path); (3)trie树。 二、(10分)简答题: (1)已知二叉树先序遍历结果为ABGFHCEIKDJ,中序遍历结果为GBHFAEKICDJ,求它的后序遍历结果。 (2)下表中A、B、C、D、E、F代表6个城市,表中数字是各城市间各公路的造价,构造这个交通网络的最小生成树。 A B C D E F A B C D E F 27 16 15 4 30 10 8 26 6 3 24 18 20 17 28 (3)给定权集合(5、4、10、1、6、8)构造相应的哈夫曼树。 (4)什么是二分查找法(Binary Search)?这种查找法有什么优、缺点? 三、(10分)什么是归并排序?实现二路归并排序总的时间复杂度为多少?给出一组关键字序 列:(16、2、36、99、88、12、65、88、30),对它进行二路归路并排序,试写出排序过程示意图。并且统计第一遍和第二遍排序所进行的关键字比较次数。 四、(10分)已知计算多项式值的归并算法如下: FUNCTION (x: real; n: integer; ): real; BEGIN IF n=0 THEN p:=1 ELSE IF n=1 THEN p:=x ELSE p:=((2*n-1)*x*p(x,n-1)-(n-1)*p*(x,n-2))/n END; 写出计算该多项式值的非递归算法。 五、(10分)按图的宽度优先搜索法写一算法判别以邻接矩阵存储的有向图中是否存在由顶点 Vi到顶点Vj的路径(i≠j).

数据结构实验一 实验报告

班级::学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验容 定义一个包含学生信息(学号,,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK;

数据结构堆栈与队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法; 队列链式存储结构下的基本算法; 实验内容: 第一题链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化StackInitiate(S),非空否StackNotEmpty(S),入栈StackiPush(S,x),出栈StackPop(S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3,4,5入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 第二题对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写主函数进行测试。 程序代码: 第一题: (1)源程序"LinStack.h"如下: #define NULL 0 typedef struct snode { DataType data; struct snode *next; } LSNode; /*(1)初始化StackInitiate(LSNode ** head) */ void StackInitiate(LSNode ** head) /*初始化带头结点链式堆栈*/

数据结构实验二(栈和队列)

实验二栈和队列的基本操作及其应用 一、实验目的 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。 2、掌握栈和队列的特点,即后进先出和先进先出的原则。 3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序 存储结构和链式存储结构上的实现。 二、实验内容 本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,学生 可以根据自己的情况任选一个! 题目一:回文判断(*) [问题描述] 对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如 “abba”是回文,而“abab”不是回文。 [基本要求] (1)数据从键盘读入; (2)输出要判断的字符串; (3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出 “Yes”,否则输出“No”。 [测试数据] 由学生任意指定。 题目二:顺序栈和循环队列基本操作(*) [基本要求] 1、实现栈的基本操作 六项基本操作的机制是:初始化栈:init_stack(S);判断栈空:stack_empty(S);取栈顶元素:stack_top(S,x);入栈:push_stack(S,x);出栈:pop_stack(S);判断栈满:stack_full(S) 2、实现队列的基本操作 六项基本操作的机制是:初始化队列:init_queue(Q);判断队列是否为空:queue_empty(Q);取队头元素:queue_front(Q,x);入队:enqueue(Q,x);出队:outqueue(Q,x);判断队列是否为满:queue_full(Q) [测试数据]

由学生任意指定。 题目三:商品货架管理(**) [问题描述] 商店货架以栈的方式摆放商品。生产日期越近的越靠近栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架,使生产日期越近的越靠近栈底。 [基本要求] 设计一个算法,保证每一次上货后始终保持生产日期越近的商品越靠近栈底。 [实现提示] 可以用一个队列和一个临时栈作为周转。 [测试数据] 由学生任意指定。 三、实验前的准备工作 1、掌握栈的逻辑结构和存储结构。 2、熟练掌握栈的出栈、入栈等操作。 3、掌握队列的逻辑结构和存储结构。 4、熟练掌握队列的出队、入队等操作 四、实验报告要求 1、实验报告要按照实验报告格式规范书写。 *2、写出算法设计思路。 3、实验上要写出多批测试数据的运行结果。 4、结合运行结果,对程序进行分析。 题目四:Rails(ACM训练题) Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, it turned out that the

实验二栈队列的实现及应用

百度文库-让每个人平等地提升自我 实验二栈、队列的实现及应用 实验课程名:数据结构与算法 专业班级:_ 学号:__________ 姓名: _ 实验时间: ____ 实验地点:指导教师:冯珊__________ 一、实验目的 1掌握栈和队列的顺序存储结构和链式存储结构,以便在实际背景下灵活运用。 2、掌握栈和队列的特点,即先进后出与先进先出的原则。 3、掌握栈和队列的基本操作实现方法。 /*顺序栈的存储类型*/ typedef struct

1 2 3 4 5远 兀 1 一 7U- 元 谴 段 囑 :> o 1 2 3 R * 元 元 栈 書 t 出 一 ^ 零 遐 次 :± 谨 虚 1 2 3 ^ 5 I B

D 认戯握结IVl 匚on&ol eAp pli cation!\[>ebu g\Con 5 o-leApp li cation 1 .exe :1 刖人操作谊睪代码(05):2 : h E s 选 的 操 一 兀 一 b 一 丁 一 丁 栈 ? 遐 次 嘆 區 1 2 3 4 5 5 ^ 元 元 栈 S 退 、 灵 岀 祓 S I ■ i 9 I I I i 主 至 ..T' 一 兀 元 栈 £ 1 2 3 4 5 \Z

百度文库 -让每个人平等地提升自我 P入操隹选择代码(0-5>:4 派元素的是 ; 栈 化 出 取 示 艮 i元一一 选 的 操 元 -> 入 中 >c 1- 苴翻(05): 5 栈 化 亍 1 2 元 元 Is 务一(2):完成下列程序,该程序实现栈的链式存储结构,构建链栈(栈中的元素依次为China , Japan, France,India ,Australia ),依次进行进栈和出栈操作,判断栈空和栈满操作,返回栈顶元素操作。 要求生成链栈时,从键盘上读取数据元素。 (1)源代码:#i nclude<> #in clude<> #in clude<> # define OK 1 # define ERROR 0 typedef char DataType; /*链式栈的存储类型*/ typedef struct SNode

数据结构实验一 实验报告

班级: 姓名: 学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入与删除等。 二、实验内容 定义一个包含学生信息(学号,姓名,成绩)的顺序表与链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号与成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; // 定义函数返回值类型 typedef struct

{ char num[10]; // 学号 char name[20]; // 姓名 double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK; } Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到i位置的数据域,返回给 e { LinkList p; p=L->next;

栈和队列——数据结构实验报告

实习报告 题目:设计一个演示用运算优先法对算数表达式求职过程的程序。班级:姓名:学号:完成日期: 一、需求分析 1建立运算数栈SqStack1和运算符栈SqStack2辅助分析算符有限关系. 2用户输入以“#”结尾的算数表达式,本程序需要用户自行输入表达式(运算符可以是加(+);减(-);乘(*);除(/);括号(())),以字符形式读入,在读入的同时,完成运算符和运算数的识别处理,在识别出运算数的同时,要将其字符序列形式转换成整数形式。 3在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作的内容,即演示运算操作。 4测试数据见原题。 5程序执行的命令包括: (1)建立算数表达式; (2)得到运算表达式的值; (3)演示运算过程。 二、概要设计 1.设定栈的抽象数据类型定义: ADT Stack{ 数据对象 D={ ai | ai ∈charSet, i=1,2,...,n, n≥0 }

数据关系: R1={ | ai-1, ai∈D, i=2,...,n } (约定an 端为栈顶,a1 端为栈底) 基本操作: InitStack(&S) 操作结果:构造一个空栈S。 Gettop(S,&e) 初始条件:栈S已存在。 操作结果:若栈S不空,则以e返回栈顶元素。 Push(&S,e) 初始条件:栈S 已存在。 操作结果:插入元素e 为新的栈顶元素。 Pop(&S,&e) 初始条件:栈S 已存在且非空。 操作结果:删除S 的栈顶元素,并用e 返回其值。}ADT Stack 2.本程序包括三个模块 (1)主程序模块: V oid main( ) { 初始化; 函数;

数据结构1

习题练习第一章绪论 1、void maxtrixmult (int n,int a[][100],int b[][100],intc[][100]) { int j,k,r; int x; for(r=0;r<=n;r++) 1) n+2 { for (j=0;j<=n;j++) 2) (n+1)*(n+2) { x=0; 3) (n+1)2 for(k=1;k<=n;k++) 4) (n+1)3 x+=a[r][k]*[k][j]; 5) n* (n+1)2 c[r][j]=x; 6) (n+1)2 } } } 计算时间每条语句的频度和该算法的时间复杂度 2.一个算法应该是( B )。【中山大学 1998 二、1(2分)】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 4.从逻辑上可以把数据结构分为( C )两大类。【武汉交通科技大学 1996 一、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 5.以下与数据的存储结构无关的术语是( D )。【北方交通大学 2000 二、1 (2分)】 A.循环队列 B. 链表 C. 哈希表 D. 栈 6.连续存储设计时,存储单元的地址( A )。【中山大学 1999 一、1(1分)】A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续 7. 数据元素是数据的最小单位。( F ) 【北京邮电大学 1998 一、1(2分)】【青岛大学 2000 一、1 (1分)】 【上海交通大学 1998 一、1】【山东师范大学 2001 一、1 (2分)】 第二章线性表 1.线性表是具有n个( C )的有限序列(n>0)。【清华大学 1998 一、 4(2分)】 A.表元素 B.字符 C.数据元素 D.数据项 E.信 息项

数据结构实验报告

本科实验报告 课程名称:数据结构(C语言版) 实验项目:线性表、树、图、查找、内排序实验地点:明向校区实验楼208 专业班级:学号: 学生姓名: 指导教师:杨永强 2019 年 1 月10日

#include #include #include #define OK 1 typedef struct{//项的表示,多项式的项作为LinkList的数据元素float coef;//系数 int expn;//指数 }term,ElemType; typedef struct LNode{ //单链表节点结构 ElemType data; struct LNode *next; }LNode, *LinkList; typedef LinkList polynomial; int CreatLinkList(polynomial &P,int n){ //创建多项式P = (polynomial)malloc(sizeof(LNode)); polynomial q=P; q->next=NULL; polynomial s; for(int i = 0; i < n; i++){ s = (polynomial)malloc(sizeof(LNode)); scanf("%f%d",&(s->data.coef),&(s->data.expn)); q->next = s; s->next = NULL; q=q->next; } return OK; } 运行结果 2. void PrintfPolyn(polynomial P){ polynomial q; for(q=P->next;q;q=q->next){ if(q->data.coef!=1) printf("%g",q->data.coef);

数据结构_实验三_栈和队列及其应用

实验编号:3四川师大《数据结构》实验报告2016年10月29日 实验三栈与队列及其应用_ 一.实验目得及要求 (1)掌握栈与队列这两种特殊得线性表,熟悉它们得特性,在实际问题背景下灵活运用它们; (2)本实验训练得要点就是“栈”得观点及其典型用法; (3)掌握问题求解得状态表示及其递归算法,以及由递归程序到非递归程序得转化方法。 二.实验内容 (1)编程实现栈在两种存储结构中得基本操作(栈得初始化、判栈空、入栈、出栈等); (2)应用栈得基本操作,实现数制转换(任意进制); (3)编程实现队列在两种存储结构中得基本操作(队列得初始化、判队列空、入队列、出队列); (4)利用栈实现任一个表达式中得语法检查(括号得匹配)。 (5)利用栈实现表达式得求值。 注:(1)~(3)必做,(4)~(5)选做。 三.主要仪器设备及软件 (1)PC机 (2)Dev C++ ,Visual C++, VS2010等 四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现栈在两种存储结构中得基本操作(栈得初始化、判栈空、入栈、出栈等); A、顺序储存: ?代码部分: //Main、cpp: #include"SStack、h" int main() { SqStack S; SElemType e;

int elect=1; InitStack(S); cout << "已经创建一个存放字符型得栈" << endl; while (elect) { Muse(); cin >> elect; cout << endl; switch (elect) { case 1: cout << "input data:"; cin >> e; Push(S, e); break; case 2: if(Pop(S, e)) {cout << e <<" is pop"<< endl; } else{cout<<"blank"<

数据结构实验报告

华南农业大学信息学院 综合性、设计性实验 起止日期:2011秋 学院软件学院专业班级10软件工程7班学号20103100070 4 姓名黄定康 实 验 题 目 实现平衡二叉排序树的各种算法 自我评价 项目算法设计独立完成情况算法熟练程度测试 通过 成功失败独立帮助掌握了解不懂 插入新结点√√√√ 前序、中序、后序遍历二叉树 (递归) √√√√ 前序、中序、后序遍历的非递 归算法 √√√√ 层次遍历二叉树√√√√ 在二叉树中查找给定关键字√√√√ 交换各结点的左右子树√√√√ 求二叉树的深度√√√√ 叶子结点数√√√√ 删除某结点√√√√ ●A---------完成实验要求的全部功能并运行通过,算法有一定的新意,程序代码 符合书写规范,实验报告叙述清晰完整,有详尽的分析和总结。 ●B---------完成实验要求的全部功能,程序代码符合书写规范,实验报告叙述 清晰完整。 ●C---------完成实验要求的大部分功能,实验报告良好。 ●D---------未按时完成实验,或者抄袭。 成 绩 教师签名:杨秋妹

实验报告 题目:实现平衡二叉排序树的各种算法 班级:10软件工程7班 姓名:黄定康 学号:201031000704 完成日期:2011/12/07 (一)分析题目要求 (1)函数说明 void R_rotate(ptr& t) -右旋转函数,从T开始做右旋转 int coutdeep(ptr t)-计算深度函数 void L_rotate(ptr& t)-左旋转函数 void leftbalance(ptr&t)-左平衡函数,从T开始做左平衡处理 void rightbalance(ptr&t)-右平衡函数 int insertA VL(ptr& t,int e,int & taller)-插入结点函数 void preorder(ptr t)-(递归)先序遍历 void preorder_2(ptr t)-(非递归)先序遍历 void inorder(ptr t)-(递归)中序遍历 void inorder_2(ptr t)-(非递归)中序遍历 void posorder(ptr t)-(递归)后序遍历 void posorder_2(ptr t)-(非递归)后序遍历 void dfs(ptr t,int type)-(递归)深度优先遍历(包含中序先序后续) void dfs_2(ptr t,int type)-(递归) 深度优先遍历 int bfs(ptr t)-层次便利 int delete_node(ptr& t,int&shorter,int temp);-删除结点函数 int Delete(ptr& t,int shorter)-删除结点函数 int transfer(ptr&t)-左右子树交换函数 int countleaf(ptr t)-计算叶节点 int checkup(ptr t,int temp)- 从树t中查找temp是否存在,存在返回1否则返回0 int main()-主函数 void show_menu(ptr t)-简单的菜单函数 (2)输入形式及输入值范围 输入形式:当树没创建时,先在第一行输入树的节点数目n,第二行再输入n个大于0的不重复整数,以空格隔开。删除结点时,直接输入要删除结点的值。 输入范围:所有int类型的大于零的值,注意不能重复输入。

数据结构栈和队列实验报告.doc

南京信息工程大学实验(实习)报告 实验(实习)名称栈和队列日期2017.11.8 得分指导老师崔萌萌 系计算机系专业软件工程年级2016 班次(1) 姓名学号 一、实验目的 1、学习栈的顺序存储和实现,会进行栈的基本操作 2、掌握递归 3、学习队列的顺序存储、链式存储,会进行队列的基本操作 4、掌握循环队列的表示和基本操作 二、实验内容 1、用栈解决以下问题: (1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。(2)表达式求值,写出程序。 2、用递归写出以下程序: (1)求n!。 (2)汉诺塔程序,并截图显示3、4、5个盘子的移动步骤,写出移动6个盘子的移动次数。

3、编程实现:(1)创建队列,将asdfghjkl依次入队。(2)将队列asdfghjkl依次出队。 4、编程实现创建一个最多6个元素的循环队列、将ABCDEF依次入队,判断循环队列是否队满。 三、实验步骤 1.栈的使用 1.1 用栈实现进制的转换: 代码如下: #include #include using namespace std; int main() { stack s; //栈s; int n,radix; printf("请输入要转换的十进制非负整数: "); scanf("%d",&n); printf("请输入目标进制: "); scanf("%d",&radix);

printf("转换为%d进制: ",radix); while(n) { s.push(n%radix); n /= radix; } while(!s.empty()) { //非空 printf("%d",s.top()); s.pop(); } printf("\n"); return 0; } 运行结果如下: 2.2 求表达式的值 代码如下: #include #include #include #include #define true 1 #define false 0 #define OPSETSIZE 8 typedef int Status;

数据结构实验报告全集

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。(3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件

#include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表 nodetype *create()//建立单链表,由用户输入各结点data域之值, //以0表示输入结束

{ elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束

数据结构栈和队列实验报告

《数据结构》课程实验报告 实验名称栈和队列实验序号实验日期 姓名院系班级学号 专业指导教师成绩 教师评语 一、实验目的和要求 (1)理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结构。 (2)重点掌握在顺序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空的条件。 (3)重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队列满和队空的条件。 (4)灵活运用栈和队列这两种数据结构解决一些综合应用问题。 二、实验项目摘要 编写一个程序algo3-1.cpp,实现顺序栈的各种基本运算,并在此基础上设计一个主程序并完成如下功能:(1)初始化栈s; (2)判断栈s是否非空; (3)依次进栈元素a,b,c,d,e; (4)判断栈s是否非空; (5)输出栈长度; (6)输出从栈顶到栈底元素; (7)输出出栈序列; (8)判断栈s是否非空; (9)释放栈。 编写一个程序algo3-3.cpp,实现顺序环形队列的各种基本运算,并在此基础上设计一个主程序并完成如下功能: (1)初始化队列q; (2)判断队列q是否非空; (3)依次进队列a,b,c; (4)出队一个元素,输出该元素; (5)输出队列q的元素个数; (6)依次进队列元素d,e,f; (7)输出队列q的元素个数; (8)输出出队序列; (9)释放队列。

三、实验预习内容 栈的顺序存储结构及其基本运算实现(初始化栈,销毁栈,求栈的长度,判断栈是否为空,进栈,取栈顶元素,显示栈中元素) 队列的顺序存储结构及其基本运算实现(初始化队列,销毁队列,判断队列是否为空,入队列,出队列) 三、实验结果与分析 3-1 #define maxsize 100 #include #include using namespace std; typedef char ElemType; typedef struct { ElemType data[maxsize]; int top; } SqStack; void InitStack(SqStack * &s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } int StackEmpty(SqStack *s) { return(s->top==-1); } int Push(SqStack *&s,ElemType e) { if(s->top==maxsize-1) return 0; s->top++; s->data[s->top]=e; return 1; } int Pop(SqStack *&s,ElemType &e) { if(s->top==-1) return 0; e=s->data[s->top];

中山大学 数据结构 校园卡功能管理系统 实验报告

实验报告 院系:数据科学与计算机学院学号: 专业:计算机类姓名: 一、实验题目 校园卡功能管理 二、实验目的 通过设计一个简单的校园卡管理系统来熟悉面向过程和面向对象的程序设计。 三、实验环境 编程软件:Microsoft Visual Studio 2010 语言:C++ 操作系统:Win7 四、实验要求 为校园卡功能管理系统设计一个或多个类(包扩其成员函数和数据成员)。从用户角度出发,其功能应该包括修改密码、充值(包括余额充值和热水卡充值)、消费、挂失、限制每日消费数额(如:超出限定的数额,会提醒用户已超出数额)、查询等功能。并且具有一定的容错能力,界面人性化,各种操作都有提示。 五、需求分析与功能设计 1、需求分析: 《校园卡功能管理系统》目的在于帮助学生更好的了解自己校园卡内的信息,具体信息包括现金余额、热水卡余额、每日消费限定数额。进入程序首先需要输入密码,若密码与账号不匹配则返回输入密码界面,若匹配则进入菜单界面,通过数字键的选择进行各种操作(修改密码、充值、挂失、限制每日消费数额、查询)。完成此项操作后,可以再次选择:返回功能选择界面、退出系统。 2、功能设计: 设计时把要实现的功能模块化,做成一个个函数,通过主函数的调用实现各个功能。 其具体功能图如下图1所示: 图1 3、类的分析与设计:

首先,需要一个类来储存学生校园卡内的各种信息(如账户名、密码、现金余额、热水卡余额、是否处于挂失状态),因此需要一个Information类用于存储此类信息。 其次,需要有一个Operation类,其中包含了1充值、2消费、3挂失、4限制每日消费数额四项操作,用户在选择界面选择了相应的数字后会执行各项操作。 实验流程图如下图2所示:

数据结构实验一 实验报告

班级:姓名:学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验内容 定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // 姓名 double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL;

数据结构-栈和队列-实验

实验三栈和队列 一、目的和要求 1. 掌握栈和队列的逻辑结构定义和各种存储结构的实现。 2. 熟练运用栈和队列的各种存储结构以及各种基本操作。 3. 根据实际问题的需要,选择栈和队列适合的存储结构解决问题。 二、实验环境 1.WindowsXP操作系统; 2.DEV C++、Visual C++6.0语言环境; 三、实验内容 (一)验证性实验(第1、4题为一组;第2、3题为另一组,每个同学选择一组完成。每个小题一个文件夹,所有文件夹打在一个包中,文件名:“学号”+“姓名”,例如: 13131000张三.rar 。提交码为2014DS3,截止时间:2014年12月14日12:00时。) 1.顺序栈的验证 (1)定义一个结构体,描述停车场中车辆的信息。车辆信息包括:车牌号(8个字符)、进场时间(年、月、日、时、分、秒)。用描述车辆信息的结构体作为栈的数据元素类型测试顺序栈的实现。 (2)修改顺序栈的入栈成员函数push(x),要求当栈满时,执行私有成员函数stackfull( )进行栈满处理。其功能是:动态创建一个比原来的栈数组大一倍的新数组,代替原来的栈数组,原来栈数组中的元素占据新数组的前半部分的位置。 2.链式栈的验证 (1)定义一个结构体,描述停车场中车辆的信息。车辆信息包括:车牌号(8个字符)、进场时间(年、月、日、时、分、秒)。用描述车辆信息的结构体作为栈的数据元素类型测试链式栈的实现。 (2)修改链式栈模板类,用带头结点的单链表作为栈的存储结构。 3.循环队列的验证 (1)定义一个结构体,描述银行排队系统中的客户信息。客户信息包括:客户号、客户类型(企业客户、VIP客户、普通客户)、到达时间(年、月、日、时、分、秒)等。用描述客户信息的结构体作为队列的数据元素类型测试循环队列的实现。 (3)修改教材中循环队列模板类,把成员数据rear改为length表示队列长度,完成修改后各成员函数的实现,并进行测试验证。 4.链队列的验证 (1)定义一个结构体,描述航空订票系统中的航班信息。航班信息包括:航班号、起飞时间(年、月、日、时、分、秒)、起飞地点(8个字符)、抵达时间(年、月、日、时、分、秒)、抵达地点(8个字符)、座位数、空位数、票价等。用描述航班信息的结构体作为队列的数据元素类型测试链队列的实现。 (2)修改教材中的链队列模板类,用一个不带头结点的单循环链表来表示队列(也称为循环链队列),其中只设一个队尾指针rear,不设队头指针,队尾指针rear指向队尾元素结点。

中山大学考研历年真题下载

中山大学考研历年真题下载 关注微信公众号,官方微博,豆瓣小组,人人小站【名称都为:鸿儒中大考研网】。以上四种方式任选两种,并截图给官网右侧“售后老师”,老师收到截图即可获得下载密码及订购资料和辅导班的优惠权限!如有考研疑问,请联系右侧的咨询老师! 注意:如果考生所报考专业的真题,并没有在以下目录中,请把你报考专业的专业名称,考试科目名称及代码发给官网老师,老师核对后会第一时间补全!链接之前,请加上: , 例如:政治真题的下载链接为 真题链接/密码 03-15中大考研:政治真题1nuyVc 00-15中大考研:英语一真题及考研英语资料1c0Hc8Li 00-15中大考研:英语二真题及考研英语资料1bnqGn1P 1987-2015中大考研:数学一真题1eQGY8BC 03-15中大考研:数学二真题1gdlixQ7 04-15中大考研:数学三真题1c0k85G0 07-15中大考研:管理类联考199真题及答案1qW0ziY4 08-15年中大:885 水文学1nty3xEh 08-15中大考研:353卫生综合1ntlCjlJ 08-15中大考研:601 高等数学(A)1mg07qgK 08-15中大考研:602 高等数学(B)1o6j8nGm 08-15中大考研:610民俗学概论1kT4DcOn 08-15中大考研:611文学评论写作1o63lcFo 08-15中大考研:612 语言学概论1pJBW4vp 08-15中大考研:613 现代汉语与语言学概论1gdxtEAf 08-15中大考研:614 文献释读1mg7sTni 08-15中大考研:615 文学基础1qW64KNy 08-15中大考研:616 作品评论1c00N6Go 08-15中大考研:618 考古学基础(A)1oayAi 08-15中大考研:620 西方哲学史1g8TnK 08-15中大考研:621 逻辑哲学与逻辑史基础知识1bnjoDX1 08-15中大考研:623 中西哲学史1mg9uIXq 08-15中大考研:624 中国美学1o6MhVCY 08-15中大考研:625 中外哲学史基础知识1c0vxTpI

相关文档
最新文档