中国矿业大学 空间数据结构上机实验报告
中矿大数据结构实验二
中国矿业大学计算机学院实验报告课程名称数据结构试验名称栈、队列的实现、递归应用班级******* 姓名****** 学号********仪器组号**** 实验日期********一、实验目的1 熟悉栈、队列这种特殊线性结构的特性2 熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。
二、实验要求1 实验之前认真准备,编写好源程序。
2 实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。
3 不断积累程序的调试方法。
三、实验内容基本题(必做):1 分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。
2 、假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设头指针,试设计相应的置队空、入队和出队的程序。
加强题:1、设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx 都是中心对称的字符串。
四、程序清单和运行结果基本题:1.1顺序栈#include <iostream.h>#include <conio.h>#include <stdlib.h>const STACK_INIT_SIZE=100; //存储空间初始分配量const STACKINCREMENT=10; //存储空间分配增量typedef struct{int *base; //在构造之前和销毁之后,base的值为NULL int *top; //栈顶指针int stacksize; //当前已分配的存储空间,以元素为单位}SqStack;void InitStack(SqStack &S){ //构造一个空栈SS.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base)exit(0); //存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE; //cout<<"初始化完毕"<<endl}//InitStackvoid GetTop(SqStack S,int &e){ //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORif(S.top==S.base){ cout<<"此栈为空!!!"<<endl;exit(0);}e=*(S.top-1);cout<<e<<endl; // cout<<"取值结束"<<endl}//GetTopvoid Push(SqStack &S,int e){ //插入元素e为新的栈顶元素if(S.top-S.base>S.stacksize){ //栈满,追加存储空间S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base){ cout<<"新分配空间失败!!!"<<endl;exit(0);}S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++=e; // cout<<"插入元素成功"<<endl}//Pushvoid Pop(SqStack &S,int &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORif(S.base==S.top){ cout<<"此栈为空栈,无法删除!!!"<<endl;exit(0);}e=*--S.top; // cout<<"删除成功!!!"<<endl}//Popvoid ClearStack(SqStack &S){ //把S置为空栈if(S.base==S.top)cout<<"此栈已经为空!!!"<<endl;S.top=S.base;}//ClearStackvoid main(){SqStack Stack;int m,n,x,y,z,i=0;InitStack(Stack);cout<<"请输入您要建立的栈的大小:"<<endl;cin>>n;Stack.stacksize=n;do{cout<<"请选择操作:"<<endl;cout<<" "<<"1,进栈2,出栈3,查看栈顶值4,清空栈5,退出"<<endl;cin>>m;switch(m){case 1:cout<<"请输入进栈值:"<<endl;cin>>z;if(i==Stack.stacksize){cout<<"Sorry!!!"<<endl<<"栈溢出!!"<<endl<<"此程序将退出!!!"<<endl;exit(0);}Push(Stack,z);i++;break;case 2:Pop(Stack,x);cout<<x<<"出栈"<<endl;break;case 3:cout<<"栈顶值为:"<<endl;GetTop(Stack,y);break;case 4:ClearStack(Stack);break;case 5:cout<<"Exit!!"<<endl;break;default:cout<<"输入错误!!!此程序将退出!!!"<<endl;exit(0);}//switch}while(m!=5);getch();}1.2链式栈#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <iomanip.h>typedef struct Stack{Stack *next;int data;}Stack,*SLink;typedef struct{SLink top;int length;}SqStack;void InitStack(SqStack &S){ //构造一个空栈S.top=NULL; //设栈顶指针的初值为"空"S.length=0; //空栈中元素个数为}//InitStackvoid Push(SqStack &S,int &e){ //在栈顶之上插入元素e 为新的栈顶元素SLink p;p=new Stack; //建新的结点p->data=e;p->next=S.top;S.top=p;++S.length;}//Pushvoid Pop(SqStack &S,int &e){ //若栈不空,则删除S的栈顶元素,用e返回其值if(!S.top){ cout<<"此栈为空栈!!!"<<endl;exit(0);}e=S.top->data;S.top=S.top->next;}//Popvoid GetTop(SqStack &S,int &e){ //若栈不空,取栈顶元素,用e返回其值if(!S.top){ cout<<"此栈为空栈!!!"<<endl;exit(0);}e=S.top->data;cout<<e<<endl;}//GetTopvoid ClearStack(SqStack &S){if(!S.top)cout<<"此栈已经为空!!!"<<endl;S.top=NULL;}//ClearStackvoid main(){SqStack Stack;InitStack(Stack);int m,n,x,y,z,i=0;cout<<"请输入您要建立的栈的大小:"<<endl;cin>>n;do{cout<<"请选择操作:"<<endl;cout<<" "<<"1,进栈2,出栈3,查看栈顶值4,清空栈5,退出"<<endl;cin>>m;switch(m){case 1:cout<<"请输入进栈值:"<<endl;cin>>z;if(i==n){cout<<"Sorry!!!"<<endl<<"栈溢出!!"<<endl<<"此程序将退出!!!"<<endl;exit(0);}Push(Stack,z);i++;break;case 2:Pop(Stack,x);cout<<x<<"出栈"<<endl;break;case 3:cout<<"栈顶值为:"<<endl;GetTop(Stack,y);break;case 4:ClearStack(Stack);break;case 5:cout<<"Exit!!"<<endl;break;default:cout<<"输入错误!!!此程序将退出!!!"<<endl;exit(0);}//switch}while(m!=5);getch();getch();}2、置队空、入队和出队的程序#include <iostream.h>#include <conio.h>#include <stdlib.h> //队空、入队和出队int n=0;typedef struct Q{int data;Q *next;}Q,*QLink;void InitQ(QLink &q){ //构造一个队列q->next=q;}//InitQvoid Push(QLink &q,int &e){ //入队QLink p;p=new Q;p->data=e;p->next=q->next;q->next=p; n++;}//Pushvoid OutQ(QLink &q,int &e){ //出队QLink p;QLink t;p=new Q;t=new Q;p=q;int i;for(i=0;i<=n;i++){if(p->next->data==e){ t=p->next;p->next=t->next;delete t;break;}//ifp=p->next;}//forif(i==(n+1)){cout<<"您所输入的值不存在!此程序将退出!!"<<endl;exit(0);}}//OutQvoid ClearQ(QLink &q){ //置队空q=q->next;}//ClearQvoid checkQ(QLink &q,int &e){ //查看队尾元素if(q->next==q){cout<<"此队列为空!!程序将退出!!"<<endl;exit(0);}e=q->next->data;}//checkvoid main(){int m,x,n,y;QLink Qu;Qu=new Q;InitQ(Qu);do{cout<<"请选择操作:"<<endl;cout<<" 1,入队2,出队3,查看队尾元素4,清空队列5,退出"<<endl; cin>>x;switch(x){case 1:cout<<"请输入您想插入的值:"<<"\t";cin>>m;Push(Qu,m);break;case 2:cout<<"请输入您想出队的值:"<<"\t";cin>>n;OutQ(Qu,n);cout<<n<<"出队"<<endl;break;case 3:checkQ(Qu,y);cout<<"队尾元素为:"<<y<<endl;break;}//switch}while(x!=5);getch();}五、运行结果:六、实验体会栈和队列是数据结构里面很重要的两种特殊线性结构,它们的操作不同于线性表,其运算(插入和删除)是受限制的。
数据结构上机实验报告
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>
数据结构集中上机实验报告
XX大学信息与计算科学专业2008级《数据结构》集中上机设计题目:迷宫求解(非递归求解)设计时间:2010-2011学年第一学期目录一、实验内容 (2)二、需求分析 (2)三、总体设计 (2)(一)存储结构 (2)(二)流程图 (3)四、详细设计 (3)(一)基本算法解析 (3)(二)为实现算法,需要的象的数据类型 (4)(三)函数的调用关系 (5)(四)算法时间、空间复杂度 (5)五、代码 (5)六、运行结果分析 (10)(一)迷宫路径探索成功 (10)(二)迷宫路径未找到的情况 (13)(三)程序的优缺点与改进 (13)七、参考文献 (14)八、心得体会 (14)一、实验内容任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出。
二、需求分析1、可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;要求使用非递归算法。
2、用户可以根据自己的需求进行输入所需的迷宫,其中1表示迷宫的墙壁,0表示迷宫的通路,从而建立迷宫。
3、可以自行输入迷宫的入口和出口坐标。
4、程序执行的命令包括:(1)构造栈函数。
其中包括了构造空栈InitStack;压入新数据元素Push;栈顶元素出栈Pop。
(2)构造求迷宫路径函数。
其中定义了二维数组maze[M][N]存取迷宫数据;输出找到的通路MazePath。
(3)建立一个迷宫initmaze。
其中包括输入迷宫行数列数以及各行各列;加一圈围墙并输出迷宫。
三、总体设计(一)存储结构:首先用二维数组存储迷宫数据,迷宫数据由用户输入。
一个以链表结构作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。
求得的通路以三元组(i,j,d)形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东南西北所用代表数字,自行定义)。
1.从入口出发,顺着某一个方向进行探索,若能走通,继续往前走,否则沿原路退回,换一个方向继续探索,直至出口位置,求得一条通路。
中国矿业大学数据结构实验一
(1)采用数组作为求解过程中使用的数据结构。
提高题:
(2)采用循环链表作为求解过程中使用的数据结构。运行时允许指定任意n、s、m数值,直至输入n = 0退出程序。
四、五程序清单和运行结果
1-1基本题:
#include<stdio.h>
#include<malloc.h>
#define TRUE 1
一、实验目的:
1、并掌握线性表的逻辑结构、物理结构。
2、并掌握顺序表的存储结构、基本操作和具体的函数定义。
3、VC++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。
4、悉VC++操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。
二、实验要求:
1实验之前认真准备,编写好源程序。
{
int k=0;
while(k<L.length&&L.data[k]!=x)
k++;
if(k<L.length)
return k;
else
return -1;
}
//6.插入元素
int Insert(SqList &L,ElemType x,int i)
{
int k;
if(i<0||i>L.length||L.length==MAXSIZE)
}
//2.建立一个顺序存储的线性表
void CreatSqlist(SqList &L,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&L.data[i]);
数据结构上机实验
数据结构上机实验本课程实验中已知的预定义常量和类型如下:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;实验一顺序表(一)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。
二、 实验内容已知:线性表的动态分配顺序存储结构为#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{int *elem;int length;int listsize;}SqList;在主程序中调用如下函数实现构造线性表,在线性表中插入数值,最后输出线性表。
1. 编写函数,Status InitList(SqList *L) 实现构造一个空的线性表,若构造成功则返回OK,否则返回ERROR。
2. 编写函数,Status ListInsert(SqList *L , int i , int e) 实现在线性表L中第i个位置之前插入新的数据元素e,L的长度加1。
若插入成功返回OK,否则返回ERROR。
(提示:i的合法值为:i>=1&&i<=L—>length+1)3. 编写函数,void ListPrint(SqList *L)实现将线性表中的元素依次输出到屏幕上。
4.编写函数,int Menu(),输出菜单项请选择你要进行的操作(请输入1-4中的任一个数字):输入1:InitList2:ListInsert3:ListPrint4:Exit实验二顺序表(二)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。
二、 实验内容在实验一的基础上,继续完成如下实验内容。
1.编写函数,Status ListDelete(Splist *L ,int i ,int *e),实现删除L的第i个数据元素,并用e返回其值,L的长度减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 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
数据结构上机实习报告
上机实习报告班号:116112姓名:**学号:***********实习报告【实习一】线性表及其应用n(n>20)的阶乘【问题描述】大数运算——计算n的阶乘(n>=20)。
【基本要求】(1)数据的表示和存储:(1.1)累积运算的中间结果和最终的计算结果的数据类型要求是整型——这是问题本身的要求;(1.2)试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值。
(2)数据的操作及其实现:基于设计的存储结构实现乘法操作,要求从键盘上输入n值,在屏幕上显示最终计算结果。
【问题分析】(1)设计数据的存储结构:介于乘运算的精确性以及实型数据表示的不精确性,本题不能采用实型表示累积运算的中间结果和最终的计算结果,而只能用整型。
然而由于普通整型和长整型所能表述数的范围受其字长的限制,不能表示大数阶乘的累积结果,故必须设计一个合适的数据结构实现对数据的存储,例如可以让每个元素或结点存储数据的若干位数值。
从问题描述不难看出n值为任意值,故为使程序尽量不受限制,应采用动态存储结构。
累积运算的特点是当前的计算结果是下次乘法运算的乘数。
实现两个数的乘法运算须考虑:(1)乘数的各位数都要与被乘数进行乘法运算;(2)乘法过程中的进位问题及其实现;(3)因每个元素或结点最多存储数据的3位数值,故当元素或结点中的数值大于999,需向前一个元素或结点进位。
综合以上几点,我采用了单链表的储存结构形式。
(2)阶乘算法的实现:1. 链表型数据乘法的具体实现描述:(1)初始算法顺序访问对每个节点上的数据乘以要乘的数后在顺序访问查看是否需要进位,大于999则向前进位,如果前面没有节点则添加新节点储存进位的数(2)改进算法将原始算法的乘操作和进位操作合在一起进行,提高程序效率.2. 数据输出算法具体实现描述从高位向低位顺序输出节点上储存的数据,注意补零,最高位的节点不补,其它节点要补。
对于最后的结果,因为我采用的是普通的单链表算法,因此我添加了一个逆置的算法。
《数据结构》上机作业——实验报告(五)[推荐]
《数据结构》上机作业——实验报告(五)[推荐]第一篇:《数据结构》上机作业——实验报告(五)[推荐]“计算机软件技术基础”课程实验报告(五)实验名称:排序算法班级_______ 姓名__________ 学号______实验日期:实验机时:3 学时实验成绩:-----------------一.实验目的:1、掌握主要排序算法的思想和实现技术。
二.实验内容:1、设计一程序,要求:输入学生“软件技术基础”课的成绩(学号、姓名、平均成绩、总学分);按总学分对学生数据进行排序。
(要求:实现任选3种排序算法)三.程序:1、程序规范(输入数据、功能、输出数据)2、设计分析(数据表示、算法)3、C源代码(电子版)四.程序调试:第二篇:《数据结构》上机作业——实验报告(六)“计算机软件技术基础”课程实验报告(六)实验名称:数据库及SQL语言班级_______ 姓名__________ 学号______实验日期:实验机时:3 学时实验成绩:-----------------一.实验目的:1、学习数据库设计的一般过程及相关技术;2、学习access数据库管理系统;3、掌握数据库的输入、查询、更新操作。
二.实验内容:1、需求陈述:某校图书馆要建立一个图书数据管理系统。
该图书馆的图书(书名、分类号、作者、出版社)存放在不同的借阅室(室名),读者(姓名、系名、类别)在书架上找到所需图书后,可以到服务台办理借阅(借阅时间)。
设计要求:λ分析需求,建立数据库的概念模型;λ将概念模型转换为关系模型(注意:是否需要作规范化处理);λ写出创建基本表的SQL语句;λ写出以下查询要求的SQL语句:(1)所有“高等数学习题集”书的信息;(2)读者“李林”借了什么书?(3)“社会学原理”在哪个借阅室?2、在access数据库管理系统中建立所设计的关系表;3、向各表中输入一组实验数据(元组)(注意:关系完整性);4、对数据库进行查询。
三.实验结果:1、实体-关系图;2、数据库表;3、创建基本表的语句;4、查询语句。
数据结构上机实验
数据结构上机实验数据结构是计算机科学中的重要基础课程,通过实践操作能够更好地理解和掌握其中的概念和算法。
上机实验是数据结构课程中不可或缺的一部分,它能够帮助学生巩固理论知识,培养编程能力和解决实际问题的能力。
本文将介绍数据结构上机实验的重要性以及一些实践操作的建议。
一、数据结构上机实验的重要性数据结构上机实验对于学生来说具有重要的意义。
首先,通过实际操作,学生能够更深入地理解数据结构的概念和原理。
数据结构作为一门理论课程,其中的概念和算法在书本上可能显得抽象和难以理解。
而上机实验可以让学生动手实践,亲自实现和操作各种数据结构,从而更好地理解它们的内部原理和使用方法。
其次,上机实验对于培养学生的编程能力和问题解决能力非常重要。
在实验过程中,学生需要根据特定的问题要求,使用各种数据结构进行设计和实现。
这个过程中,他们需要编写代码、调试程序,并在实践中不断调整和优化算法。
这样的实践操作能够提高学生的编程技巧和思维能力,培养他们解决实际问题的能力。
最后,数据结构上机实验还能够提供学生实践应用所学知识的机会。
通过解决实际问题,学生可以将课程中的知识应用到实际场景中,并且发现其中的应用价值和意义。
这样的实践体验能够增强学生的学习兴趣和动力,使他们更加深入地学习和理解数据结构。
二、数据结构上机实验的实践操作建议1. 提前准备在进行数据结构上机实验之前,学生需要提前准备。
首先,要充分理解每个实验的要求和目标,确保清楚问题的需求和评分标准。
其次,要熟悉所使用的编程语言和相关开发环境,确保能够熟练地使用各种编程工具和调试技巧。
此外,还应该阅读相关的教材和资料,对所涉及的数据结构和算法有一定的了解。
2. 深入思考在做实验之前,学生应该仔细思考问题的解决思路和算法设计。
首先,要充分理解问题的背景和需求,明确问题的输入输出以及期望结果。
其次,要考虑所使用的数据结构和算法,选择合适的数据结构来存储和处理数据,并设计高效的算法来解决问题。
数据结构上机实验报告6
队列的实现(要求有出队和入队函数)
①创建最大长度为10的循环顺序队列。②将a、b、c、d、e、f依次入队,边入队,直到入队完毕。③若队列不空,将元素边出队,边打印输出。④再依次将g、h、i、j、j入队;出队和入队操作时要求输出当前队列的对头和队尾位置。
四、算法描述及实验步骤
用算法表示方法,流程图等形式表达算法设计思想与算法实现步骤
五、调试过程及实验结果
详细记录程序在调试过程中出现的问题及解决方法。
记录程序执行的结果。
六、总结
对上机实践结果进行分析,上机的心得体会。
七、附录(源程序清单)
数据结构上机实验报告6—AAXXX
课程名称:数据结构
年级:
实验日期:
姓名:xxx
学号:AA
班级:
实验名称:队列ቤተ መጻሕፍቲ ባይዱ操作
实验序号:实验六
成员人数:
一、实验目的及要求
1.了解C语言程序的特点
2.掌握简单的C语言程序结构
3.熟练掌握运行C程序的步骤和方法
4.掌握队列的概念和应用
二、实验环境
Turbo 2.0或相近的环境
《数据结构》课程设计上机实习报告课设报告模板
《数据结构》课程设计上机实习报告课设题目系部班级学生姓名学号序号指导教师时间信息系 计算机 61101xxxx 2013.12.23~2013.1.4自己的题目一、设计目的1.进一步熟悉 VC++开发环境,熟悉用 C 语言完成一个应用程序的设计过程, 掌握有关编辑、调试和整合程序的方法和技巧。
2.通过此设计,了解《数据结构》课程中图的逻辑结构和物理结构;掌握有 关图的相关实际应用以及对应算法的原理与具体实现;体会数据结构在解决现实 问题中的作用和重要性。
3.通过此设计,学会分析算法时间复杂度和空间复杂度的方法,针对求解相 同问题的不同算法,掌握对其性能的比较策略。
可结合实际进行补充二、设计内容1. 2. 3. 请将自己的需求描述清楚。
先对本设计的问题进行描述(做这个设计能实现什么 功能、达到什么目的),再分条描述基本要求,需要给出总体框图。
可参考下面内容。
设计内容 1.设计题目:简易城市交通咨询系统的设计 2.问题描述: 出于不同目的的旅客对交通工具有不同的要求,例如,因出公差的旅客希望在旅途中的时间尽可能短,出门旅游的旅客则期望旅费尽可能省,而老年旅客则 要求中转次数最少。
要求编制一个简易城市交通咨询系统,为旅客提供两种或者 三种最优决策的交通咨询。
按图 1 所示城市交通网(图中边上的权值表示城市之 间的距离),实现系统各个功能。
第 1 页(共 6 页)图 1 城市交通信息网3. 基本要求 用图的邻接矩阵或邻接表的表示方法存储图 1 所示的城市交通信息网。
在主 函数中设计功能菜单,利用菜单调用各个函数,分别完成图 2 所示各功能:图 2 系统功能模块图1) 设计在相应存储结构(邻接矩阵或邻接表)下的图的类型声明。
2)根据图 1 所示交通网,创建交通信息。
A、新建交通信息:通过用户输入, 新建城市交通信息,并能够将所创建的交通网的顶点和边的信息存储于文件中; B、读取交通信息:从指定位置文件中读取顶点和边的信息,生成交通信息网。
大一数据结构集中上机实习报告
exp1->next=exp2->next;
exp2->next=exp3;
exp3=exp1->pre;
exp1->pre=exp2->pre;
exp2->pre=exp3;
}
exp3=exp1;
exp1=exp2;
exp2=exp3;
break;
}
}
exp2=exp2->next;
printf("查找失败!\n");
return const_Fail;
}
else{
*res=b;
temp=b->name;
printf("姓名:");
for(counter2=0;counter2<=limit;counter2++){
putchar(*temp);
temp++;
}
printf("\n");
}
}//插入新元素
int link_search(headpoint &a,experiment **res)
{
experiment *b;
b=a.head;
char info[21],*temp;
int counter2,limit=0,result;
if(a.length==0){
printf("空!\n");//判断通讯录是否为空
}while(*tempor!='\0');
printf("\n");
tempor=temp->phonenumber;
数据结构上机实习报告
一、选题:设计和实现多项式运算二、需求分析:1、实现带头结点的单循环链表表示的多项式,即用带头结点的链表存储多项式的系数和指数。
2、设计和实现多项式相加和相乘运算算法。
3、设计一个测试程序:测试多项式加法和乘法运算。
要求:建立一个多项式打印(显示)一个多项式实现两个多项式相加;实现两个多项式相乘。
三、概要设计:程序采用顺序表的存储结构。
1、运用头插法创建多项式:先创建两个结构体,用Linklisthead=(Linklist)malloc(sizeof(LNode));语句,创建一个链表的头结点,在定义两个节点指针,一个指向头结点,一个用来分配新的存储空间,将输入的数据存入新节点中,在将新节点一个一个依次连接到头结点后。
并以多项式的项数作为多项式的输出: 将p指针指向头结点,再用p=p->next;将p指针向下移,再用p->next!=NULL作为while()语句的结束条件,如果p->data.expn==0,则只输出系数,如果p->data.coef>0,则输出“+系数*X^指数”,如果p->data.coef<0,则输出“系数*X^指数”,则算法结束。
2、比较两个指数的大小:如果L1->data.expn==L2->data.expn,返回1,如果L1->data.expn>L2->data.expn,返回-1,如果L1->data.expn<L2->data.exn,返回0.3、两多项式相加:定义一个新的链表,将相加后的多项式存入新的链表中,用while()语句循环将两个链表的每一项进行相加,并以pb&&pc作结束条件,将指数相等的项的系数相加,指数不变存入新的结点中;当pb->data.expn〈pc->data.expn时,将pc的数据域存入新结点中,并将pc的指针后移;当pb->data.expn>pc->data.expn时,将pb的数据域存入新结点中,并将pb的指针后移。
数据结构上机实验报告
实验名称:数据结构实验实验时间:2021年X月X日实验地点:计算机实验室实验目的:1. 理解并掌握基本数据结构(线性表、栈、队列、链表、树、图)的概念和操作。
2. 能够运用C语言实现基本数据结构的各种操作。
3. 培养编程能力和问题解决能力。
实验内容:1. 线性表2. 栈3. 队列4. 链表5. 树6. 图实验环境:1. 操作系统:Windows 102. 编程语言:C语言3. 开发环境:Visual Studio 2019实验步骤:一、线性表1. 实现线性表的创建、插入、删除、查找和遍历等基本操作。
2. 编写代码,实现以下功能:- 创建一个线性表,包含10个元素。
- 在第3个位置插入一个新元素。
- 删除第5个位置的元素。
- 查找线性表中的第7个元素。
- 遍历线性表,并打印所有元素。
二、栈1. 实现栈的创建、入栈、出栈、判空和求栈顶元素等基本操作。
2. 编写代码,实现以下功能:- 创建一个栈。
- 向栈中依次入栈元素1、2、3、4、5。
- 判断栈是否为空。
- 求栈顶元素。
- 出栈元素,并打印出栈的元素。
三、队列1. 实现队列的创建、入队、出队、判空和求队头元素等基本操作。
2. 编写代码,实现以下功能:- 创建一个队列。
- 向队列中依次入队元素1、2、3、4、5。
- 判断队列是否为空。
- 求队头元素。
- 出队元素,并打印出队的元素。
四、链表1. 实现单链表、双向链表和循环链表的创建、插入、删除、查找和遍历等基本操作。
2. 编写代码,实现以下功能:- 创建一个单链表,包含元素1、2、3、4、5。
- 在第2个位置插入一个新元素。
- 删除第3个位置的元素。
- 查找链表中的第4个元素。
- 遍历链表,并打印所有元素。
五、树1. 实现二叉树的创建、插入、删除、查找和遍历等基本操作。
2. 编写代码,实现以下功能:- 创建一个二叉树,包含元素1、2、3、4、5。
- 在第2个位置插入一个新元素。
- 删除第3个位置的元素。
数据结构上机实验报告
数据结构上机实验报告一、实验目的本次数据结构上机实验的主要目的是通过实际编程操作,深入理解和掌握常见的数据结构及其基本操作,提高解决实际问题的能力和编程技能。
具体目标包括:1、熟练掌握线性表、栈、队列、树、图等数据结构的基本概念和存储方式。
2、学会运用数据结构的相关算法进行数据的插入、删除、查找、排序等操作。
3、培养分析问题、设计算法、编写代码和调试程序的综合能力。
4、增强对数据结构在实际应用中的认识,提高解决复杂问题的思维能力。
二、实验环境1、操作系统:Windows 102、编程环境:Visual Studio 20193、编程语言:C++三、实验内容本次实验共包括以下几个部分:1、线性表的操作实现顺序表和链表的创建、插入、删除、查找和遍历操作。
比较顺序表和链表在不同操作下的性能差异。
2、栈和队列的应用利用栈实现表达式求值。
用队列模拟银行排队系统。
3、树的遍历实现二叉树的先序、中序和后序遍历算法,并输出遍历结果。
构建哈夫曼树,并进行编码和解码操作。
4、图的基本操作用邻接矩阵和邻接表存储图,并实现图的深度优先搜索和广度优先搜索算法。
四、实验步骤及结果1、线性表的操作顺序表的实现:```cppinclude <iostream>using namespace std;define MAXSIZE 100 //顺序表的最大长度class SeqList {private:int dataMAXSIZE; //存储顺序表元素的数组int length; //顺序表的当前长度public:SeqList(){//构造函数,初始化顺序表length = 0;}//插入元素bool insert(int pos, int element) {if (pos < 0 || pos > length || length == MAXSIZE) {return false;}for (int i = length; i > pos; i) {datai = datai 1;}datapos = element;length++;return true;}//删除元素bool remove(int pos) {if (pos < 0 || pos >= length) {return false;}for (int i = pos; i < length 1; i++){datai = datai + 1;}length;return true;}//查找元素int search(int element) {for (int i = 0; i < length; i++){if (datai == element) {return i;}}return -1;}//遍历输出顺序表void traverse(){for (int i = 0; i < length; i++){cout << datai <<"";}cout << endl;}};int main(){SeqList list;listinsert(0, 10);listinsert(1, 20);listinsert(2, 30);listtraverse();listremove(1);listtraverse();int position = listsearch(30);if (position!=-1) {cout <<"元素 30 在位置"<< position << endl;} else {cout <<"未找到元素 30" << endl;}return 0;}```链表的实现:```cppinclude <iostream>using namespace std;class Node {public:int data;Node next;Node(int element) {data = element;next = NULL;}};class LinkedList {private:Node head;public:LinkedList(){head = NULL;}//插入元素void insert(int element) {Node newNode = new Node(element);if (head == NULL) {head = newNode;} else {Node current = head;while (current>next!= NULL) {current = current>next;}current>next = newNode;}}//删除元素void remove(int element) {if (head == NULL) {return;}if (head>data == element) {Node temp = head;head = head>next;delete temp;return;}Node current = head;Node prev = NULL;while (current!= NULL && current>data!= element) {prev = current;current = current>next;}if (current!= NULL) {prev>next = current>next;delete current;}}//查找元素bool search(int element) {Node current = head;while (current!= NULL) {if (current>data == element) {return true;}current = current>next;}return false;}//遍历输出链表void traverse(){Node current = head;while (current!= NULL) {cout << current>data <<"";current = current>next;}cout << endl;}};int main(){LinkedList list;listinsert(10);listinsert(20);listinsert(30);listtraverse();listremove(20);listtraverse();if (listsearch(30)){cout <<"找到元素 30" << endl;} else {cout <<"未找到元素 30" << endl;}return 0;}```性能比较:在插入和删除操作中,顺序表在表头或中间位置操作时需要移动大量元素,时间复杂度较高;而链表只需要修改指针,时间复杂度较低。
数据结构上机实验报告
数据结构上机实验报告1. 实验目的本次实验旨在通过编写程序,掌握和理解常见的数据结构及其应用。
2. 实验环境与工具- 操作系统:Windows 10- 开发语言:C++- 集成开发环境(IDE):Visual Studio Code3. 实验内容及步骤3.1 线性表操作演示程序设计与分析步骤:a) 设计一个线性表类,并包含以下基本功能:i) 初始化线性表;ii) 插入元素到指定位置;iii) 删除指定位置的元素;iv) 获取指定位置处的元素值。
b)使用该线性表类进行一系列测试,验证各个功能是否正常运行。
记录并分析每个函数调用所消耗时间以评估算法效率。
3.2 栈和队列综合应用设计与模拟步骤:a)根据给出问题需求,在已有栈、队列等相关代码基础上完成如下任务:i)利用两个堆栈来模拟浏览器前进后退功能;ii)使用循环链式存储结构表示双向链队, 并对其进行初始化、入队、出队等操作。
b). 运行以上代码片段,并输出相应结果。
同时分析算法的时间复杂度和空间复杂度。
4. 实验结果与讨论a) 线性表操作演示程序设计与分析实验结果:- 初始化线性表所需时间为X秒;- 插入元素到指定位置平均耗时Y毫秒;- 删除指定位置的元素平均耗时Z毫秒。
b)栈和队列综合应用设计与模拟实验结果:i) 浏览器前进后退功能测试:共浏览N个网页,前进M 次、后退K次。
运行总体消耗时间T1;ii) 双向链队初始化、入队、出对等操作测试: 共进行P 组数据处理, 运行总体消耗时间T2.5. 结论通过本次上机实验,我们掌握了线性表及其相关基本操作,并且成功完成了栈和队列在特定场景下的应用。
同时,在代码编写过程中也深刻理解并评估了各种算法效率。
6. 致谢感谢老师们给予我宝贵意见以及同学们之间相互交流合作提供支持。
7. 附件8. 法律名词及注释在此处添加涉及到的法律名词或术语,并提供简要注释。
数据结构第4次实验报告
中国矿业大学计算机学院实验报告课程名称数据结构实验名称搜索班级计科11-3 姓名冯剑飞学号08113405 仪器组号_21-22机房_____ 实验日期2012年12月28号实验报告要求:1.实验目的 2.实验内容 3.实验步骤4.运行结果5.流程图6.实验体会一、实验目的1 熟练掌握顺序搜索、折半搜索和索引搜索等基本搜索算法,熟悉这些算法适合在何种存储结构下实现2 熟练掌握二叉排序树的特性、建立方法以及动态搜索算法3 熟练掌握散列表的特点及构造方法二、实验要求1 实验之前认真准备,编写好源程序。
2 实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。
3 不断积累程序的调试方法。
三、实验步骤1、阅读教材相关章节,了解程序架构。
2、根据伪代码编写实现可执行程序。
3、调试程序,提高程序健壮性。
4、输入多组数据,测试程序,寻找漏洞。
5、在关键部位写下注释,提高程序可读性。
四、实验内容基本题1、实现基于有序顺序表的折半搜索。
#include <iostream>using namespace std;struct nodeList{int number;char name[15];int CETgrade;};int main (){int search(nodeList nodeList[], int n, int v);nodeList nodeList[10]={{0,"zhangwei",545},\{1,"zengxiaoxian",456},\{2,"guangu",525},\{3,"lvziqiao",421},\{4,"zhangfei",343},\{5,"liubei",555},\{6,"caocao",546},\{7,"lvbu",400},\{8,"sunquan",567},\{9,"zhugeliang",654}};cout<<"-----编号---"<<"姓名--------"<<"成绩------"<<endl;for(int i=0;i<10;i++){cout<<" "<<nodeList[i].number<<" "<<nodeList[i].name<<" "<<nodeList[i].CETgrade<<endl;}cout<<"请输入要查找的编号(0到9)"<<endl;int v;cin>>v;int find=search(nodeList,10,v);cout<<"该编号学生的情况为"<<nodeList[find].number<<" "<<nodeList[find].name<<" "<<nodeList[find].CETgrade<<endl;return 0;}int search(nodeList nodeList[], int n, int v){int left, right, middle;left = 0, right = n - 1;while (left <= right){middle = (left + right) / 2;if (nodeList[middle].number > v){right = middle - 1;}else if (nodeList[middle].number < v){left = middle + 1;}else{return middle;}}return -1;}2、设单链表的结点是按关键字的值从小到大排列的,试写出对此表的搜索程序并调试。
数据结构上机报告
Practice Report for Data Structures and Algorithm AnalysisData Structures Course ReportCandidate:Student Number:Major : Communication EngineeringSupervisor : Wu rangzhongChina University of Geosciences(Wuhan)Wuhan, Hubei 430074, P. R. ChinaDecember 31, 2013链表实现线性表一、实验目的与要求1、实现单链表的建立;2、掌握单链表的插入、删除和查找运算;3、熟练进行C语言源程序的编辑调试。
二、实验内容(1)建立带表头结点的单链表;首先输入结束标志,然后建立循环逐个输入数据,直到输入结束标志。
(2)输出单链表中所有结点的数据域值;首先获得表头结点地址,然后建立循环逐个输出数据,直到地址为空。
(3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y;建立两个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,建立循环扫描链表。
当当前结点指针域不为空且数据域等于x的时候,申请结点并给此结点数据域赋值为y,然后插入当前结点后面,退出函数;当当前结点指针域为空的时候,申请结点并给此结点数据域赋值为y,插入当前结点后面,退出函数。
(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。
建立三个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,最后一个备用;建立整形变量l=0;建立循环扫描链表。
当当前结点指针域为空的时候,如果当前结点数据域等于k,删除此结点,l++,跳出循环,结束操作;如果当前结点数据域不等于k,跳出循环,结束操作。
当当前结点指针域不为空的时候,如果当前结点数据域等于k,删除此结点,l++,继续循环操作;如果当前结点数据域不等于k,指针向后继续扫描。
空间数据结构课程设计实践报告
空间数据结构课程设计实践报告
首先,我们将介绍空间数据结构的基本概念和理论知识。
空间
数据结构是计算机科学中一个重要的领域,它涉及到对多维空间中
对象的组织、存储和查询。
我们将详细介绍空间数据结构的分类、
特点以及常见的应用场景,让读者对空间数据结构有一个清晰的认识。
其次,我们将描述课程设计的具体内容和目标。
课程设计的实
践部分通常包括对某一种空间数据结构的实现和应用。
我们将详细
介绍所选择的空间数据结构,例如四叉树、kd树等,并阐述其在实
际问题中的应用。
同时,我们将说明课程设计的主要目标,例如通
过这个实践项目加深对空间数据结构的理解,提高编程能力等。
然后,我们将分析课程设计的实施过程和结果。
在这一部分,
我们将详细描述课程设计的实施步骤,包括需求分析、设计、编码、测试等阶段。
同时,我们将分析实施过程中遇到的问题和挑战,并
说明我们是如何克服这些问题的。
最后,我们将展示课程设计的最
终成果,包括实现的功能、性能评估结果等。
最后,我们将总结课程设计的收获和不足,并提出未来的改进
方向。
我们将总结课程设计过程中取得的成果和经验,分析存在的不足和改进空间,并提出未来进一步深入研究的方向和课程设计改进的建议。
通过这份报告,我们希望能够全面、系统地展现空间数据结构课程设计的实践情况,让读者对这个课程设计有一个清晰的认识,并为未来的学习和研究提供借鉴和参考。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《空间数据结构基础》上机实验报告(2010级)姓名班级学号环境与测绘学院1.顺序表的定义与应用(课本P85习题)【实验目的】熟练掌握顺序表的定义与应用,通过上机实践加深对顺序表概念的理解。
【实验内容】设有两个整数类型的顺序表A(有m个元素)和B(有n个元素),其元素均从小到大排列。
试编写一个函数,将这两个顺序表合并成一个顺序表C,要求C的元素也从小到大排列。
【主要代码】#include<iostream.h>//定义在头文件“SeqList.h”中#include<stdlib.h>const int defaultSize=100;template<class T>class SeqList{protected:T *data;//存放数组int maxSize;//最大可容纳表象的项数int Last;//当前已存表象的项数void reSize(int newSize);//改变data数组空间大小public:SeqList(int sz=defaultSize);SeqList(SeqList<T>& L);~SeqList(){delete[]data;}int Size() const{return maxSize;}int Length()const{return Last+1;}int Search(T& x)const;int Locate(int i) const;T getData(int i) const;bool setData(int i,T& x){if(i>0&&i<=Last+1) data[i-1]=x;}bool Insert(int i,T& x);bool Remove(int i,T& x);bool IsEmpty(){return (Last==-1)?true:false;}bool IsFull(){return(Last==maxSize-1)?true:false;}void input();void output();SeqList<T> operator=(SeqList<T>& L);friend void rank(SeqList<int>& L);friend void hebing(SeqList<int>& LA,SeqList<int>& LB);};//构造函数,通过指定参数sz定义数组的长度template<class T>SeqList<T>::SeqList(int sz){if(sz>0){maxSize=sz;Last=-1;data=new T[maxSize];if(data==NULL){cerr<<"存储分配错误"<<endl;exit(1);}}}//复制构造函数,用参数表中给出的已有顺序表初始化新建的顺序表template<class T>SeqList<T>::SeqList(SeqList<T>& L){maxSize=L.Size();Last=L.Length()-1;data=new T[maxSize];if(data==NULL){cerr<<"存储分配错误"<<endl;exit(1);}for(int i=1;i<=Last+1;i++)data[i-1]=L.getData(i);}//用于取第i个表项的值template <class T>T SeqList<T>::getData(int i) const{if (i<1 || i>Last+1){cerr<<"存储分配错误"<<endl;exit(1);}else return data[i-1];}//私有函数,扩充顺序表的存储空间大小,新数组的元素个数为newsize template<class T>void SeqList<T>::reSize (int newSize){if (newSize<=0){cerr<<"无效的数组大小"<<endl;return;}if(newSize!=maxSize){T*newarray=new T[newarray];if(newarray=NULL){cerr<<"存储分配错误"<<endl;exit(1);}int n=Last+1;T*srcptr=data;T*destptr=newarray;while(n--)*destptr++=*srcptr++;delete []data;data=newarray;maxSize=newSize;}}//搜索函数template<class T>int SeqList<T>::Search(T& x)const{for(int i=0;i<=Last;i++)if(data[i]==x)return i+1;return 0;}//定位函数template<class T>int SeqList<T>::Locate(int i)const{if(i>=1&&i<=Last+1)return i;else return 0;}//插入函数template<class T>bool SeqList<T>::Insert(int i,T& x){if(Last==maxSize-1) return false;if(i<0||i>Last+1) return false;for(int j=Last;j>=i;j--)data[j]=data[j-1];data[i]=x;Last++;return true;}//删除函数template<class T>bool SeqList<T>::Remove(int i,T&x){if(Last==-1)return false;if(i<1||i>Last+1)return false;x=data[i-1];for(int j=i;j<=Last;j++)data[j-1]=data[j];Last--;return true;}//输入函数template<class T>void SeqList<T>::input(){cout<<"开始建立顺序表,请输入表中元素的最后位置:";while(1){cin>>Last;Last--;if(Last<=maxSize-1) break;cout<<"表元素个数有误,个数不能超过"<<maxSize-1<<":";}for(int i=0;i<=Last;i++){cin>>data[i];}}//输出函数template<class T>void SeqList<T>::output(){cout<<"顺序表中当前元素的最后位置为:"<<Last<<endl;for(int i=0;i<=Last;i++)cout<<data[i]<<endl;}//重载操作,顺序表整体赋值template<class T>SeqList<T> SeqList<T>::operator=(SeqList<T>& L){maxSize=L.Size();Last=L.Length()-1;data=new T[maxSize];if(data==NULL){cerr<<"存储分配错误"<<endl;exit(1);}for(int i=1;i<=Last+1;i++)data[i-1]=L.getData(i);}//合并函数,用于合并顺序表LA,LB。
结果存于LA。
重复元素只留一个。
void hebing(SeqList<int>& LA,SeqList<int>& LB){int n=LA.Length(),m=LB.Length(),k,x;for(int i=1;i<=m;i++){x=LB.getData(i);k=LA.Search(x);if(k==0){LA.Insert(n,x);n++;}}}//对合并后的顺序表进行排序void rank(SeqList<int>& L){int i,j,temp;for(i=1;i<L.Length();i++)for(j=0;j<L.Length()-i;j++){if(L.data[j]>L.data[j+1]){temp=L.data[j];L.data[j]=L.data[j+1];L.data[j+1]=temp;}}}void main(){SeqList<int>LA;//定义顺序表类对象LASeqList<int>LB;//定义顺序表类对象LBLA.input();LB.input();hebing(LA,LB);SeqList<int>LC(LA);rank(LC);LC.output();}运行结果:【实验体会】通过本次试验,我熟练掌握顺序表的定义与应用。
此次实验通过对顺序表的类定义,进行两顺序表的合并,并在合并后删除相同的元素,然后对新数组进行从小到大的排序。
因为顺序表是基于一维数组的储存,所以可以选择冒泡法进行排序。
类代码中包含三个数据成员,多个作为外部接口的成员函数,完成顺序表的搜索,定位,插入和删除等操作。
运用类模板,Seqlist的数据成员不使用固定的类型定义,而是用class说明的虚拟类型名T作为变量的类型,在定义Seqlist类的对象时,再用C++的基本类型将对象的数据成员的类型实例化。