华北电力大学数据结构实验报告
华北电力大学数据库实验报告

='"+textBox2.Text+"'"; label8.Text = "数据删除成功|";
mandText = mysql; mycmd.Connection = myconn; mycmd.ExecuteNonQuery(); myconn.Close(); } catch (Exception Err) { MessageBox.Show(Err.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error); myconn.Close(); }}}
MessageBox.Show("主属性不能为空"); } else {
try {
myconn.Open(); mysql = "update Student set 姓名='"
电大《数据结构》实验报告

数据结构形成性考核册实验名称:实验一线性表线性表的链式存储结构【问题描述】某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:(1)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。
(2)在链表中删除一个最高分和一个最低分的结点。
(3)计算该参赛者去掉一个最高分和一个最低分后的平均成绩。
【基本要求】(1)建立一个评委打分的单向链表;(2)显示删除相关结点后的链表信息。
(3)显示要求的结果。
【实验步骤】(1)运行PC中的Microsoft Visual C++ 程序,(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“”→在“位置”中选择储存路径为“桌面”→“确定”,(3)输入程序代码,程序代码如下:#include <>#include <>#include <>#include <>#include <>#define NULL 0#define PWRS 5 2.2f ge=n; ame);printf("性别0女1男: ");scanf("%d",&m[i].sex);printf("年龄: ");scanf("%d",&m[i].age);printf("\n");}return 1;}int calc(STD *m,STD *n,STD *r,float &Fage,float &Mage){ int i,j=1,k=1;n[0].age=r[0].age=0;for( i=1;i<=m[0].age;i++){ if(m[i].sex==0){strcpy(n[j].name,m[i].name);n[j].sex=m[i].sex; n[j].age=m[i].age;n[0].age++; Mage+=m[i].age;j++;}else{strcpy(r[k].name,m[i].name);r[k].sex=m[i].sex; r[k].age=m[i].age;r[0].age++;Fage+=m[i].age;k++;}}Mage=Mage/n[0].age; Fage=Fage/r[0].age;cout<<"女生的平均年龄是:"<<Mage<<"男生的平均年龄是:"<<Fage<<endl;return 1;}void print(STD *m){for(int i=1;i<=m[0].age;i++){printf ("姓名:%3s, 性别(0女1男):%d, 年龄:%d\n",m[i].name,m[i].sex,m[i].age);}}程序运行结果如下:实验结束。
电大数据结构实验报告

实验一单链表的插入,删除,初始化一、实验环境Windows xp 操作系统 Turbo C 2.0二、实验目的通过对链表的实际操作,巩固链表的基本知识,关键是掌握指针的操作。
三、实验内容生成一个头指针是head的单链表,然后对该链表进行插入和删除运算。
四、实验要求1 编写程序生成一个单链表;2 插入、删除用子程序实现;3 输出每次运算前后的链表,进行比较与分析。
五、实验步骤#include <stdlib.h>#include <stdio.h>#define NULL 0typedef struct LNode{int data;struct LNode *next;}LNode, *LinkList;//假设下面的单链表均为带头结点。
void CreatLinkList(LinkList &head,int j){//建立一个单链表L;,数据为整数,数据由键盘随机输入。
int i;LinkList p,q;head=(LinkList)malloc(sizeof(LNode));head->next=NULL;q=head;printf("在单链表内输入整数:\n");for(i=0;i<j;i++){ p=(LinkList)malloc(sizeof(LNode));scanf("%d",&p->data);p->next=q->next;q->next=p;q=p;}}int PrintLinkList(LinkList &L){//输出单链表L的数据元素LNode *p;p=L->next;if(L->next==NULL){printf("链表没有元素!\n");return 0;}printf("单链表的数据元素为:");while(p){printf("%d ",p->data);p=p->next;}printf("\n");//return 1;}void LinkListLengh(LinkList &L){//计算单链表L的数据元素个数。
数据结构实训实验报告

一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。
为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。
二、实验目的1. 掌握常见数据结构(如线性表、栈、队列、树、图等)的定义、特点及操作方法。
2. 熟练运用数据结构解决实际问题,提高算法设计能力。
3. 培养团队合作精神,提高实验报告撰写能力。
三、实验内容本次实验主要包括以下内容:1. 线性表(1)实现线性表的顺序存储和链式存储。
(2)实现线性表的插入、删除、查找等操作。
2. 栈与队列(1)实现栈的顺序存储和链式存储。
(2)实现栈的入栈、出栈、判断栈空等操作。
(3)实现队列的顺序存储和链式存储。
(4)实现队列的入队、出队、判断队空等操作。
3. 树与图(1)实现二叉树的顺序存储和链式存储。
(2)实现二叉树的遍历、查找、插入、删除等操作。
(3)实现图的邻接矩阵和邻接表存储。
(4)实现图的深度优先遍历和广度优先遍历。
4. 算法设计与应用(1)实现冒泡排序、选择排序、插入排序等基本排序算法。
(2)实现二分查找算法。
(3)设计并实现一个简单的学生成绩管理系统。
四、实验步骤1. 熟悉实验要求,明确实验目的和内容。
2. 编写代码实现实验内容,对每个数据结构进行测试。
3. 对实验结果进行分析,总结实验过程中的问题和经验。
4. 撰写实验报告,包括实验目的、内容、步骤、结果分析等。
五、实验结果与分析1. 线性表(1)顺序存储的线性表实现简单,但插入和删除操作效率较低。
(2)链式存储的线性表插入和删除操作效率较高,但存储空间占用较大。
2. 栈与队列(1)栈和队列的顺序存储和链式存储实现简单,但顺序存储空间利用率较低。
(2)栈和队列的入栈、出队、判断空等操作实现简单,但需要考虑数据结构的边界条件。
3. 树与图(1)二叉树和图的存储结构实现复杂,但能够有效地表示和处理数据。
数据结构实验报告4(电大)

实验报告四图的存储方式和应用(学科:数据结构)姓名单位班级学号实验日期成绩评定教师签名批改日期实验名称:实验四图的存储方式和应用4.1建立图的邻接矩阵【问题描述】根据图中顶点和边的信息编制程序建立图的邻接矩阵。
【基本要求】(1)程序要有一定的通用性。
(2)直接根据图中每个结点与其他结点的关联情况输入相关信息,程序能自动形成邻接矩阵【测试用例】【实现提示】(1)对图的顶点编号。
(2)在上图中,以顶点1为例,因为顶点2,3,4与顶点1关联,可以输入信息1 2 3 4,然后设法求出与顶点1关联的结点,从而求得邻接矩阵中相应与顶点1的矩阵元素。
实验图4-1【实验报告内容】设计程序代码如下:#include<stdio.h>#define MaxVertexNum 5#define MaxEdgeNum 20#define MaxValue 1000typedef int VertexType;typedef VertexType vexlist [MaxVertexNum];typedef int adjmatrix [MaxVertexNum] [MaxVertexNum];void Createl(vexlist Gv,adjmatrix GA,int n,int e){int i,j,k,w;printf("输入%d个顶点数据\n",n);for(i=0;i<n;i++) scanf("%d",&Gv[i]);for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j) GA[i][j]=0;else GA[i][j]=MaxValue;}Printf(“输入一条边的两端点序号i和j及边上的权w\n”);printf("输入%d条无向带权边\n",e);for(k=1;k<=e;k++){scanf("%d%d%d",&i,&j,&w);GA[i][j]=GA[j][i]=w;}}void main(){vexlist vl;adjmatrix a;Createl(vl,a,5,8);}。
【电大本科数据结构实验报告】栈和队列的基本操作

实验报告(学科:数据结构)姓名__________________单位_______________________班级______________________实验名称:2.1 栈和队列的基本操作【问题描述】编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。
【基本要求】(1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。
(2)程序中要体现出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规则打印结果栈中的元素。
【实验步骤】(1)建立顺序栈SeqStack,存放测试数据;建立队列SeqQueue存放出栈数据;(2)建立InitStack、StackEmpty、StackFull、Pop、Push、GetTop函数用作顺序栈的基本操作;(3)建立InitQueue、QEmpty、Qfull、InQueue、OutQueue、ReadFront函数用作队列的基本操作;(4)建立主函数依次按序对子函数进行操作:InitStack初始化栈→Push压入数据→InitQueue初始化队列→Pop弹出数据→InQueue存入队列→OutQueue出队列→Push压入栈→Pop弹出数据→free清空栈与队列。
在数据的输入与数据的输出时提供必要的提示信息。
(5)使用Visual Studio C++ 2005语言环境进行调试,源代码P202-2-1.cpp通过编译生成目标文件P202-2-1.obj,运行可执行文件:实验2-2-1.exe测试通过。
【源代码】#include "stdio.h"#include "stdlib.h"#define MaxSize 8typedef int ElemType;/*顺序栈的类型定义*/struct SeqStack{ElemType data[MaxSize];int top;};struct SeqStack * s;/*顺序队列的类型定义*/struct SeqQueue{ElemType data[MaxSize];int front,rear;};struct SeqQueue * sq;/*栈的基本运算*//*初始化栈操作*/void InitStack(struct SeqStack * s){s->top=-1;}/*判断栈空操作*/int StackEmpty(struct SeqStack * s){if(s->top==-1){ return(1);}else{return(0);}}/*判断栈满操作*/int StackFull(struct SeqStack * s){if(s->top==MaxSize-1){ return(1);}else{ return(0);}}/*压栈操作*/void Push(struct SeqStack *s,ElemType x) {if(s->top==MaxSize-1){printf("栈满溢出错误!\n");exit(1);}s->top++;s->data[s->top]=x;}/*弹栈操作*/ElemType Pop(struct SeqStack * s){if(StackEmpty(s)){printf("栈下溢错误!!\n");return(1);}s->top--;return s->data[s->top+1];}/*获取栈顶元素操作*/ElemType GetTop(struct SeqStack * s){if(StackEmpty(s)){printf("栈下溢错误!\n");exit(1);}return s->data[s->top];}/*队列的基本运算*//*初始化队列*/void InitQueue(struct SeqQueue * sq){sq->front=0;sq->rear=0;}/*判队空*/int QEmpty(struct SeqQueue * sq){if(sq->front==sq->rear){printf("队列已空,不能进行出队操作!\n");return(1); /*如果链队为空,则返回*/}else{return(0); /*否则返回*/ };}/*判队满*/int Qfull(struct SeqQueue * sq){if(sq->rear==MaxSize){ /*判队列是否已满*/printf("队列已满!\n");return(1); /*入队失败,退出函数运行*/ }return(0);}/*入队列操作*/void InQueue(struct SeqQueue * sq, int x){if(!Qfull(sq)){sq->data[sq->rear]=x; /*数据送给队尾指针所指单元*/sq->rear++; /*将队尾指针加*/ }}/*出队列操作*/ElemType OutQueue(struct SeqQueue *sq){if(sq->rear==sq->front){ /*判断队列是否为空*/printf("队列已空,不能进行出队操作!!\n");return(1); /*出队失败,退出函数运行*/ }sq->front++;return sq->data[sq->front-1];}/*读队头元素*/void ReadFront(struct SeqQueue * sq,int x){if(!QEmpty(sq)){sq->front++; /*将头指针加,前移*/OutQueue(sq); /*出队列操作*/ }}void main(){int n;struct SeqStack *a=(SeqStack *)malloc(sizeof(struct SeqStack));/*分配栈的内存空间,使结构指针a指向栈地址*/struct SeqQueue *sq=(SeqQueue *)malloc(sizeof(struct SeqQueue));InitStack(a);do{printf("输入栈中的数据:");scanf("%d",&n);Push(a,n);/*把数据压入栈中*/}while(!StackFull(a));InitQueue(sq);do{InQueue(sq,Pop(a)); /*弹出栈数据,把数据放进队列中*/}while(!(StackEmpty(a)&&Qfull(sq)));do{Push(a,OutQueue(sq)); /*从队列输出数据,把数据压入到栈内*/}while(!(QEmpty(sq)&&StackFull(a)));do{printf("输出栈中的数据:%d\n",Pop(a)); /*弹出栈中所有数据*/ }while(!StackEmpty(a));free(a);free(sq);}【实验数据】【结论】由于栈的结构特点决定了栈对数据的操作规则。
华北电力大学数据结构实验报告

cout<<"车牌号为"<<x<<"的车停在停车场第"<<s->top+1<<"号位置."<<endl; //细节:数组是从0记位的
} } void carleave(stack* s1,stack* s2,queue *q,int x)//处理车辆离开 {
int y; int a,n=0; while((s1->top>-1)&&(n==0)) {
第 页共 页
华北电力大学实验报告
"<<endl; }
}
cout<<" 车 牌 号 为 "<<y<<" 的 车 开 进 停 车 场 并 停 在 "<<s1->top+1<<" 号 位 置
} void main()//主程序 {
cout<<">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
第 页共 页
华北电力大学实验报告
数据结构实验实训总结报告

一、实验背景随着计算机技术的飞速发展,数据结构作为计算机科学的重要基础,已经成为现代软件开发和数据处理的关键技术。
为了提高学生的数据结构应用能力,我们学校开设了数据结构实验实训课程。
本课程旨在通过实验实训,使学生深入理解数据结构的基本概念、性质、应用,掌握各种数据结构的实现方法,提高编程能力和解决实际问题的能力。
二、实验内容本次数据结构实验实训主要包括以下内容:1. 数据结构的基本概念和性质通过实验,使学生掌握线性表、栈、队列、串、树、图等基本数据结构的概念、性质和应用场景。
2. 数据结构的存储结构通过实验,使学生熟悉线性表、栈、队列、串、树、图等数据结构的顺序存储和链式存储方法,了解不同存储结构的优缺点。
3. 数据结构的操作算法通过实验,使学生掌握线性表、栈、队列、串、树、图等数据结构的插入、删除、查找、遍历等基本操作算法。
4. 数据结构的实际应用通过实验,使学生了解数据结构在各个领域的应用,如网络数据结构、数据库数据结构、人工智能数据结构等。
三、实验过程1. 实验准备在实验开始前,教师首先对实验内容进行讲解,使学生了解实验目的、实验步骤和实验要求。
同时,教师要求学生预习实验内容,熟悉相关理论知识。
2. 实验实施(1)线性表:通过实现线性表的顺序存储和链式存储,实现插入、删除、查找等操作。
(2)栈和队列:通过实现栈和队列的顺序存储和链式存储,实现入栈、出栈、入队、出队等操作。
(3)串:通过实现串的顺序存储和链式存储,实现串的插入、删除、查找等操作。
(4)树:通过实现二叉树、二叉搜索树、平衡二叉树等,实现树的插入、删除、查找、遍历等操作。
(5)图:通过实现图的邻接矩阵和邻接表存储,实现图的插入、删除、查找、遍历等操作。
3. 实验总结实验结束后,教师组织学生进行实验总结,总结实验过程中的收获和不足,提出改进措施。
四、实验成果通过本次数据结构实验实训,学生取得了以下成果:1. 掌握了数据结构的基本概念、性质和应用场景。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北电力大学
实验报告
|
|
实验名称算法与数据结构综合实验
课程名称算法与数据结构
|
|
专业班级:学生姓名:
学号:成绩:
指导教师:实验日期:
(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm,
右2.1cm;字体:宋体小四号,1.25倍行距。
)
(实验一停车场管理)
(实验二约瑟夫环)
(实验三二叉树的存储及遍历)
(实验四图的存储及遍历)
(实验五哈希表的设计)
一、实验目的及要求
二、所用仪器、设备
三、实验原理
四、实验方法与步骤
五、实验结果与数据处理
六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)
七、所附实验输出的结果或数据
break;
case 2:Leave(&s,&t,&Q);
break;
case 3:exit(0);
default:break;
}
}
system("pause");
}
五、实验结果
1、进入车站:
2、车站已满进入便道:
3、车辆离开:
六、总结与体会
1、虽然实验中遇到了一些问题,但最后在老师的帮助下问题很快就解决了,主要是由于刚开始接触算法不是很熟悉。
2、通过《停车场管理》的实验学习使我基本上理解并学会了用栈的先进后出和队列的先进先出的原理去解决实际问题的思想和方法。
但是在编程方面还是很欠缺,还要加强学习。
实验二约瑟夫环
一、实验内容
约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
试设计一个程序求出出列顺序。
二、实验目的
掌握顺序表和链表的定义和实现,学习利用顺序表和链表解决问题。
三、所用仪器、设备
计算机,VC++2010。
四、实验方法与步骤
分析约瑟夫问题:n个人围成圈,提供密码m,从第一个人开始,数到第m个人,删除,从下一个人开始进行第二轮操作,直到所有人都出列。
n个人围圈,形成线性关系;处理为逐个删除,故用链式结构合适;又人员围成圆圈,所以此链式结构采用循环方式较好;排号按照一个方向进行,故数据结构采用带头结点的单向循环链表。
假设人员以首次的编号命名,对每个人员采用编号加以描述。
利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。
2、输入密码m,进行约瑟夫环游戏
六、总结与体会
1、刚开始对头结点的运用不是很熟悉,通过本次实验加深了我对头结点、链表和顺序表的认识。
2、这次实验相对来说比较简单,但中间也出现了一些错误,在老师的帮助下问题很快就解决了。
3、认识到自己的编程技术还是比较次的,以后一定多多练习。
实验三二叉树的存储及遍历
一、实验内容
1、按先序次序输入二叉树中结点的值,建立一棵以二叉链表作存储结构的二叉树。
2、然后按先序、中序、后序顺序分别遍历这棵二叉树。
二、实验目的
1、树是一种重要的非线性数据结构,要求掌握二叉树的两种基本的存储结构,及各种操作的算法实现(建立、遍历)以及应用。
1、建立二叉树
2、对二叉树进行遍历
六、总结与体会
1、树状结构中的重点自然是二叉树。
对于二叉树的很多操作都是基于对二叉树的遍历,掌握了如何遍历,很多问题也就迎刃而解了,比如对二叉树结点的查找访问、统计二叉树中叶子结点的数目、求二叉树的深度等。
2、学习算法的目的是利用算法解决实际问题。
会写课本上已有的算法之后,可以借其思想进行扩展,逐步提高编程能力。
比如数值转换,括号匹配的检验,检验平衡二叉树等。
for(int i=1;i<=MAX;i++)
visited[i]=0;
cout<<"深度优先遍历:"<<endl;
dfs(&ga,1,visited);
cout<<endl;
for(int i=1;i<=MAX;i++)
visited[i]=0;
cout<<"广度优先遍历:"<<endl;
bfs(&ga,1,visited);
cout<<endl;
system ("pause");
}
五、实验结果
1、输入顶点数和边数
2、输入顶点对
3、图的深度优先遍历和广度优先遍历
六、总结与体会
1、本次试验设计内容比较多,虽然实验过程中多次出现问题,但通过老师的帮助和多次调试最终得到解决。
2、通过本次试验,对图的建立有了更深的了解,对书上的代码进行了实现,熟悉并掌握了dfs和bfs算法,对图结构的运用有了进一步的认识。
实验五哈希表的设计
一、实验内容
设计哈希表实现电话号码查询系统。
要求实现以下功能:
(1)哈希表中每个记录有下列数据项:电话号码、用户名、地址;
(2)从键盘输入各记录,以电话号码为关键字建立哈希表(至少要有12个以上的记录,哈希表的长度为8);
(3)采用链地址法解决冲突;
(4)显示建立好的哈希表,并在哈希表上查找、删除和插入给定关键字值得记录。
二、实验目的
1.熟练掌握哈希表的构造方法,深刻理解哈希表与其他结构表的实
质性差别。
2. 建立哈希表,采用除留余数法进行哈希表的散列,即以电话号码作为主关
键字,将电话号码的11位相加,按照模7取余。
3.解决冲突用链地址法。
case 4:exit(0);
default:cout<<"你输入错误,请重新输入"<<endl;
}
}
system("pause");
}
五、实验结果
1、添加记录
2、查找记录
3、删除记录
4、显示记录
六、总结与体会
1、所有的实验结束了。
很快,收获很多。
感觉像是一个从无到有的过程,非常的充实。
哈希表的问题的基本算法老师在课堂上有涉及过,但具体的还要靠自己去钻研。
我在一边做上机实验时,一边到图书馆查阅书籍,反复实践操作,往往比书本上得到的更多,体会也更深刻。
2、通过本次课程设计对哈希表问题有了一个比较全面的认识和了解。
哈希表问题,在存储位置和关键字之间建立对应关系,根据对应关系找到定值key。
若结构中存在关键字和定值key相等的记录,必定在f (key)的存储位置上,由此可以省去比较过程,直接找到所查记录。
哈希表其实不难,课程设计考验的是我们的学习态度,独立思考问题,和解决问题的能力。
把握这次机会肯定大有收获。