数据结构 实验六

合集下载

实验6 查找和排序 (2)(1)

实验6 查找和排序 (2)(1)

实验六、七:查找、排序算法的应用班级 10511 学号 20103051114 姓名高卫娜一、实验目的1 掌握查找的不同方法,并能用高级语言实现查找算法。

2 熟练掌握顺序表和有序表的顺序查找和二分查找方法。

3 掌握排序的不同方法,并能用高级语言实现排序算法。

4 熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。

二、实验内容1 创建给定的顺序表。

表中共包含八条学生信息,信息如下:学号姓名班级C++ 数据结构1 王立03511 85 762 张秋03511 78 883 刘丽03511 90 794 王通03511 75 865 赵阳03511 60 716 李艳03511 58 687 钱娜03511 95 898 孙胜03511 45 602 使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。

如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

3 使用二分查找方法,从查找表中查找学号为7和12的学生。

如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

(注意:创建静态查找表时必须按学号的从小到大排列!)4 使用直接插入排序方法,对学生信息中的姓名进行排序。

输出排序前和排序后的学生信息表,验证排序结果。

5 使用直接选择排序方法,对学生信息中的C成绩进行排序。

输出排序前和排序后的学生信息表,验证排序结果。

6 使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。

输出排序前和排序后的学生信息表,验证排序结果。

7 编写一个主函数,将上面函数连在一起,构成一个完整程序。

8 将实验源程序调试并运行。

三、实验结果源程序代码为:#include<iostream.h>#include<string.h>#include <stdlib.h>#define MAXSIZE 10typedef char KeyType1;typedef int KeyType2;typedef struct{//学号姓名班级C++ 数据结构KeyType1 name[20];KeyType2 xuehao;KeyType1 Class[20];double score[2];} DataType;typedef struct{DataType data[MAXSIZE+1];int len;} SeqList;//顺序表的创建void create(SeqList &L){cout<<"请输入顺序表的大小:"<<endl;cin>>L.len;cout<<"请输入顺序表中八条学生信息(学号姓名班级C++ 数据结构):"<<endl;for(int i=1;i<=L.len;i++){cin>>L.data[i].xuehao;cin>>L.data[i].name;cin>>L.data[i].Class;cin>>L.data[i].score[0];cin>>L.data[i].score[1];}}void Input(SeqList &L){for(int i=1;i<=L.len;i++){cin>>L.data[i].xuehao;cin>>L.data[i].name;cin>>L.data[i].Class;cin>>L.data[i].score[0];cin>>L.data[i].score[1];}}//顺序表的显示void print(SeqList L){cout<<"学号姓名班级C++ 数据结构"<<endl;if(L.len==0){cout<<"该表是空表!"<<endl;return;}for(int i=1;i<=L.len;i++){cout<<" "<<L.data[i].xuehao<<" "<<L.data[i].name<<" "<<L.data[i].Class<<" "<<L.data[i].score[0]<<" "<<L.data[i].score[1];cout<<endl;}}//顺序查找方法从查找表中查找姓名为赵阳和王夏的学生void S_Search(SeqList L){char na[20];cout<<"请输入要查找的同学的姓名:"<<endl;cin>>na;strcpy(L.data[0].name,na); //监视哨int i=L.len;while(strcmp(L.data[i].name,na)>0||strcmp(L.data[i].name,na)<0)i--;if(i>0){cout<<"您要查找的学生的信息:"<<endl; cout<<"学号姓名班级C++ 数据结构"<<endl;cout<<" "<<L.data[i].xuehao<<" "<<L.data[i].name<<" "<<L.data[i].Class<<" "<<L.data[i].score[0]<<" "<<L.data[i].score[1];cout<<endl;}if(i<=0){cout<<"对不起,没有该同学的信息!"<<endl;}}//二分查找方法从查找表中查找学号为7和12的学生//非递归void Binary_Search(SeqList &L){int kx;cout<<"请输入您要查找的学生信息的学号:"<<endl;cin>>kx;int low=1,high=L.len,mid;while(low<=high){mid=(low+high)/2;if(L.data[mid].xuehao==kx){cout<<"您要查找的学生的信息:"<<endl; cout<<"学号姓名班级C++ 数据结构"<<endl;cout<<" "<<L.data[mid].xuehao<<" "<<L.data[mid].name<<" "<<L.data[mid].Class<<" "<<L.data[mid].score[0]<<" "<<L.data[mid].score[1];cout<<endl;break;}else if(L.data[mid].xuehao>kx)high=mid-1;elselow=mid+1;}if(low>high){cout<<"没有该学号的学生信息!"<<endl;}}//直接插入排序方法对顺序表直接插入排序的算法对学生信息中的姓名进行排序:void InsertSort( SeqList &L ){int i, j;for( i=2; i<=L.len; i++ )if(strcmp(L.data[i].name, L.data[i-1].name)<0){L.data[0]=L.data[i]; // 复制为哨兵for(j=i-1; strcmp(L.data[0].name, L.data[j].name)<0; j-- )L.data[j+1]=L.data[j]; // 记录后移L.data[j+1]=L.data[0]; // 插入到正确位置}print(L);}//直接选择排序方法对学生信息中的C成绩进行排序void SelectSort(SeqList &L){int i, j,k;DataType temp;for( i=1; i<L.len; i++ ){k = i;for( j=i+1; j<=L.len; j++ )if( L.data[j].score[0] < L.data[k].score[0] )k = j ;if( k != i ){temp = L.data[i];L.data[i] = L.data[k];L.data[k] =temp;}}print(L);}//冒泡排序方法对学生信息中的数据结构成绩进行排序void BubbleSort(SeqList &L){int i,j,flag=1;DataType x;for(i=1;((i<L.len)&&(flag==1));i++){flag=0;for(j=1;j<L.len-i+1;j++)if(L.data[j].score[1]>L.data[j+1].score[1]){x=L.data[j];L.data[j]=L.data[j+1];L.data[j+1]=x;flag=1;}}print(L);}void main(){SeqList L;int a;cout<<endl;while(a!=0){cout<<endl;cout<<"-------------------------欢迎使用学生信息系统----------------------------\n"<<endl;cout<<endl;cout<<" 1 :录入学生信息 2 :按姓名查找学生信息3:按学号查找学生信息"<<endl;cout<<endl;cout<<" 4 :按姓名排序后学生信息5 :按c成绩排序学生信息"<<endl;cout<<endl;cout<<" 6 :按数据结构成绩排序后学生信息7 :显示0 :退出"<<endl;cout<<endl;cout<<"--------------------------------------------------------------------------"<<endl;cout<<endl;cout<<"输入您的选择为:";cin>>a;switch(a){case 1:{ create(L); break; }case 2: //顺序查找方法从查找表中查找姓名为赵阳和王夏的学生{ S_Search(L); break; }case 3:{ Binary_Search(L); break; }case 4:{cout<<"对学生信息中的姓名进行排序为:"<<endl;InsertSort(L);break;}case 5:{cout<<"对学生信息中的C成绩进行从低到高排序为:"<<endl;SelectSort(L);break;}case 6:{cout<<"对学生信息中的数据结构成绩进行从低到高排序为:"<<endl;BubbleSort(L);break;}case 7:{ print(L); break; }case 0: exit(0);default:{cout<<"您输入的序号不正确,请重新输入:"<<endl;break;}}}}建立顺序表的运行结果为图1-1:图1-1录入学生信息查找的运行结果如图1-2,图1-3:图1-2按姓名查找图1-3按学号查询排序的运行结果如下图1-4,图1-5,图1-6:图1-4按姓名排序图1-5按c成绩排序图1-6按数据结构成绩排序结束结果如图1-7:图1-7推出程序四、实验总结(1)exit(0)需要头文件#include<stdlib.h>退出程序;(2)比较字符串使用头文件#<string.h>中得strcmp();复制字符串使用strcpy();(3)从表的一端开始,向另一端逐个将给定值x与关键码进行比较;使用折半查找的前提:查找表必须是有序表;在有序表中,取中间元素作为比较对象(4)直接插入排序是一种稳定的排序方法。

《数据结构》实验报告

《数据结构》实验报告

苏州科技学院数据结构(C语言版)实验报告专业班级测绘1011学号10201151姓名XX实习地点C1 机房指导教师史守正目录封面 (1)目录 (2)实验一线性表 (3)一、程序设计的基本思想,原理和算法描述 (3)二、源程序及注释(打包上传) (3)三、运行输出结果 (4)四、调试和运行程序过程中产生的问题及采取的措施 (6)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (6)实验二栈和队列 (7)一、程序设计的基本思想,原理和算法描述 (8)二、源程序及注释(打包上传) (8)三、运行输出结果 (8)四、调试和运行程序过程中产生的问题及采取的措施 (10)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (10)实验三树和二叉树 (11)一、程序设计的基本思想,原理和算法描述 (11)二、源程序及注释(打包上传) (12)三、运行输出结果 (12)四、调试和运行程序过程中产生的问题及采取的措施 (12)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (12)实验四图 (13)一、程序设计的基本思想,原理和算法描述 (13)二、源程序及注释(打包上传) (14)三、运行输出结果 (14)四、调试和运行程序过程中产生的问题及采取的措施 (15)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (16)实验五查找 (17)一、程序设计的基本思想,原理和算法描述 (17)二、源程序及注释(打包上传) (18)三、运行输出结果 (18)四、调试和运行程序过程中产生的问题及采取的措施 (19)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (19)实验六排序 (20)一、程序设计的基本思想,原理和算法描述 (20)二、源程序及注释(打包上传) (21)三、运行输出结果 (21)四、调试和运行程序过程中产生的问题及采取的措施 (24)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (24)实验一线性表一、程序设计的基本思想,原理和算法描述:程序的主要分为自定义函数、主函数。

【杨圣洲】数据结构实验报告

【杨圣洲】数据结构实验报告

江西科技师范大学实验报告课程数据结构B系别大数据科学学院班级22信息管理与信息系统学号********姓名杨圣洲报告规格一、实验目的二、实验原理三、实验仪器四、实验方法及步骤五、实验记录及数据处理六、误差分析及问题讨论目录实验一线性表的顺序存储 (1)实验二线性表的链式存储 (2)实验三二叉树 (3)实验四图 (4)实验五检索 (5)实验六内排序 (6)每次实验课必须带上此本子,以便教师检查预习情况和记录实验原始数据。

实验时必须遵守实验规则。

用正确的理论指导实践必须人人亲自动手实验,但反对盲目乱动,更不能无故损坏仪器设备。

这是一份重要的不可多得的自我学习资料它将记录着你在大学生涯中的学习和学习成果。

请你保留下来,若干年后再翻阅仍将感到十分新鲜,记忆犹新。

它将推动你在人生奋斗的道路上永往直前!实验一线性表的顺序存储实验名称:实验一线性表的顺序存储实验目的:1、掌握线性表顺序存储结构的描述,学会对顺序存储线性表的基本操作。

2、掌握C 语言的结构化程序设计思想,巩固对结构体和数组的运用。

实验原理:C语言结构化程序设计思想,结构体及数组的应用。

实验设备:电脑,TURBO C2.0/WIN-TC/VISUAL C++实验内容:1、顺序表的倒置。

2、顺序表的有序插入。

实验代码:void order_input(list* p, int* count) {int number; printf("输入您想要插入的数字:"); scanf("%d", &number);int loc = *count;for (int i = 0; i < *count; i++) {if (p->array[i] > number) {loc = i;break; // 找到位置后退出循环} }// 将元素从 loc 位置开始向右移动一位for (int i = *count; i > loc; i--) {p->array[i] = p->array[i - 1];}// 在 loc 位置插入新元素p->array[loc] = number; (*count)++;}void revers(list* p, int count) {int left = 0; int right = count - 1; int temp;for (int i = 0; i < count / 2; i++) {temp = p->array[right]; p->array[right] = p->array[left]; p->array[left] = temp;right--; left++; } }实验结果:输入几个数字:5 现在开始输入数字:1 3 5 6 8 倒置输出数组:8 6 5 3 1输入要有序插入的数字:7 现在开始输出数组:8 7 6 5 3 1实验心得:通过本次实验,深入理解了有序列表中插入元素的操作,掌握了保持列表有序性的方法。

数据结构实训实验报告

数据结构实训实验报告

一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。

为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。

二、实验目的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)二叉树和图的存储结构实现复杂,但能够有效地表示和处理数据。

数据结构 实验报告

数据结构 实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中非常重要的一门课程,通过本次实验,旨在加深对常见数据结构(如链表、栈、队列、树、图等)的理解和应用,提高编程能力和解决实际问题的能力。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

操作系统为 Windows 10。

三、实验内容1、链表的实现与操作创建一个单向链表,并实现插入、删除和遍历节点的功能。

对链表进行排序,如冒泡排序或插入排序。

2、栈和队列的应用用栈实现表达式求值,能够处理加、减、乘、除和括号。

利用队列实现银行排队系统的模拟,包括顾客的到达、服务和离开。

3、二叉树的遍历与操作构建一棵二叉树,并实现前序、中序和后序遍历。

进行二叉树的插入、删除节点操作。

4、图的表示与遍历用邻接矩阵和邻接表两种方式表示图。

实现图的深度优先遍历和广度优先遍历。

四、实验步骤及结果1、链表的实现与操作首先,定义了链表节点的结构体:```cppstruct ListNode {int data;ListNode next;ListNode(int x) : data(x), next(NULL) {}};```插入节点的函数:```cppvoid insertNode(ListNode& head, int val) {ListNode newNode = new ListNode(val);head = newNode;} else {ListNode curr = head;while (curr>next!= NULL) {curr = curr>next;}curr>next = newNode;}}```删除节点的函数:```cppvoid deleteNode(ListNode& head, int val) {if (head == NULL) {return;}ListNode temp = head;head = head>next;delete temp;return;}ListNode curr = head;while (curr>next!= NULL && curr>next>data!= val) {curr = curr>next;}if (curr>next!= NULL) {ListNode temp = curr>next;curr>next = curr>next>next;delete temp;}}```遍历链表的函数:```cppvoid traverseList(ListNode head) {ListNode curr = head;while (curr!= NULL) {std::cout << curr>data <<"";curr = curr>next;}std::cout << std::endl;}```对链表进行冒泡排序的函数:```cppvoid bubbleSortList(ListNode& head) {if (head == NULL || head>next == NULL) {return;}bool swapped;ListNode ptr1;ListNode lptr = NULL;do {swapped = false;ptr1 = head;while (ptr1->next!= lptr) {if (ptr1->data > ptr1->next>data) {int temp = ptr1->data;ptr1->data = ptr1->next>data;ptr1->next>data = temp;swapped = true;}ptr1 = ptr1->next;}lptr = ptr1;} while (swapped);}```测试结果:创建了一个包含 5、3、8、1、4 的链表,经过排序后,输出为 1 3 4 5 8 。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的本实验旨在通过对数据结构的学习和实践,掌握基本的数据结构概念、原理及其应用,培养学生的问题分析与解决能力,提升编程实践能力。

二、实验背景数据结构是计算机科学中的重要基础,它研究数据的存储方式和组织形式,以及数据之间的关系和操作方法。

在软件开发过程中,合理选用和使用数据结构,能够提高算法效率,优化内存利用,提升软件系统的性能和稳定性。

三、实验内容本次实验主要涉及以下几个方面的内容:1.线性表的基本操作:包括线性表的创建、插入、删除、查找、修改等操作。

通过编程实现不同线性表的操作,掌握它们的原理和实现方法。

2.栈和队列的应用:栈和队列是常用的数据结构,通过实现栈和队列的基本操作,学会如何解决实际问题。

例如,利用栈实现括号匹配,利用队列实现银行排队等。

3.递归和回溯算法:递归和回溯是解决很多求解问题的常用方法。

通过编程实现递归和回溯算法,理解它们的思想和应用场景。

4.树和二叉树的遍历:学习树和二叉树的遍历方法,包括前序、中序和后序遍历。

通过编程实现这些遍历算法,加深对树结构的理解。

5.图的基本算法:学习图的基本存储结构和算法,包括图的遍历、最短路径、最小生成树等。

通过编程实现这些算法,掌握图的基本操作和应用。

四、实验过程1.具体实验内容安排:根据实验要求,准备好所需的编程环境和工具。

根据实验要求逐步完成实验任务,注意记录并整理实验过程中遇到的问题和解决方法。

2.实验数据采集和处理:对于每个实验任务,根据要求采集并整理测试数据,进行相应的数据处理和分析。

记录实验过程中的数据和结果。

3.实验结果展示和分析:将实验结果进行适当的展示,例如表格、图形等形式,分析实验结果的特点和规律。

4.实验总结与反思:总结实验过程和结果,回顾实验中的收获和不足,提出改进意见和建议。

五、实验结果与分析根据实验步骤和要求完成实验任务后,得到了相应的实验结果。

对于每个实验任务,根据实验结果进行适当的分析。

数据结构实验6报告

数据结构实验6报告

数据结构实验报告第 6 次实验一、实验目的1.理解栈是操作受限(插入push, 删除pop)的线性表, 受限的是插入删除的位置。

2.在链式存储结构下实现:StackEmpty, Push,Pop, 几个基本操作。

3.通过调用基本操作实现括号匹配算法。

二、实验内容(问题)写一个算法, 识别依次读入的一个字符序列是否为形如‘序列1&序列2’模式的字符序列。

其中序列1和序列2中都不含字符‘&’, 且序列2是序列1的逆序列。

例如, ‘a+b&b+a’是属该模式的字符序列, 而’1+3&3-1’则不是。

测试数据: ’1+3&3-1’; ’a+b+c&c+b+a’; ’a+b+c&c+b’; ’b+c&c+b+a’;提示:利用栈 , 利用已实现的基本操作三、算法描述(给出自然语言描述的算法)1.向后依次扫描字符序列, 如果考察的字符不等于‘&’则入栈, 遇到‘&’则停止。

2.从‘&’后继续扫描, 考察字符的时候, 栈顶元素出栈, 若二者相等, 继续扫描;不等, 模式不成立。

3.扫描结束后, 栈空则模式成立四、详细设计(画流程图)五、程序代码#include<stdio.h>#include<stdlib.h>#define True 1#define False 0#define OK 1#define ERROR 0typedef int status;typedef char ElemType;typedef struct SNode{ElemType data;struct SNode *next;}SNode, *LinkStack;status InitStack(LinkStack &S);int StackEmpty(LinkStack S);status Push(LinkStack &S, ElemType e);status Pop(LinkStack &S, ElemType &e);status Is_Match(ElemType f[20]);main(){ElemType formula[20];int i;for(i=0;i<=3;i++){printf("\n请输入一个字符序列表达式: ");scanf("%s",formula);if(Is_Match(formula)==1) printf(" \n这个表达式符合‘序列1&序列2’模式!\n"); else printf("\n 这个表达式不符合‘序列1&序列2’模式!\n");}return(1);}status InitStack(LinkStack &S){S=NULL;return(OK);}int StackEmpty(LinkStack S){if(S==NULL) return(True);else return(False);}status Push(LinkStack &S, ElemType e){LinkStack p;p=(LinkStack)malloc(sizeof(SNode));if(!p) return(ERROR);p->data=e;p->next=S;S=p;return(OK);}status Pop(LinkStack &S, ElemType &e){LinkStack p;if(!S) return(ERROR);e=S->data;p=S;S=S->next;free(p);return(OK);}status Is_Match(ElemType f[20]){LinkStack St; ElemType *p,c;InitStack(St);p=f;for(;*p!='&';p++){ Push(St,*p);if(!Push(St, *p)) return(ERROR);}p++;for(;*p!='\0';p++){Pop(St,c);if(!Pop(St,c)) return(ERROR);else if(c!=*p) return(ERROR);}if(StackEmpty(St)) return(OK);else return(ERROR);}七、用户手册(教用户怎么用这个程序)用途: 判断字符串是否是“序列1&序列2’模式”用法:启动此程序, 屏幕会提示你输入数据, 输入数据并按下回车键即可。

实验六 图及其应用

实验六 图及其应用

实验六图及其应用数据结构实验六图及其应用1、实验目的? 熟练掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法 ? 掌握图的基本运算及应用? 加深对图的理解,逐步培养解决实际问题的编程能力2、实验内容:采用邻接表或邻接矩阵方式存储图,实现图的深度遍历和广度遍历;用广度优先搜索方法找出从一顶点到另一顶点边数最少的路径。

1.问题描述:利用邻接表存储结构,设计一种图(有向或无向),并能够对其进行如下操作:1) 创建一个可以随机确定结点数和弧(有向或无向)数的图; 2) 根据图结点的序号,得到该结点的值;3) 根据图结点的位置的第一个邻接顶点的序号,以及下一个邻接顶点的序号;4) 实现从第v 个顶点出发对图进行深度优先递归遍历; 5) 实现对图作深度优先遍历;6) 实现对图进行广度优先非递归遍历; 编写主程序,实现对各不同的算法调用。

2.实现要求:(以邻接表存储形式为例)编写图的基本操作函数::对图的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。

1)“建立图的邻接表算法”:CreateGraph(ALGraph *G) 操作结果:采用邻接表存储结构,构造没有相关信息的图G2)“邻接表表示的图的递归深度优先遍历算法”:DFSTraverse(ALGraphG,void(*Visit)(char*)) 初始条件:图G 已经存在;操作结果:返回图的按深度遍历的结果。

3)“邻接表表示的图的广度优先遍历算法”: BFSTraverse(ALGraphG,void(*Visit)(char*)) 初始条件:图G 已经存在;操作结果:返回图的按广度遍历的结果。

4)“邻接表从某个结点开始的广度优先遍历算法”:BFS(ALGraph G, int v)初始条件:图G 已经存在;操作结果:返回图从某个结点开始的按广度遍历的结果。

分析: 修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。

数据结构实验课教案

数据结构实验课教案

数据结构实验课教案一、实验目的与要求1. 实验目的(1) 掌握数据结构的基本概念和算法。

(2) 培养实际操作能力,巩固课堂所学知识。

(3) 提高编程技能,为实际项目开发打下基础。

2. 实验要求(1) 严格按照实验指导书进行实验。

(2) 实验前认真预习,充分理解实验内容。

(3) 实验过程中积极思考,遇到问题及时解决。

(4) 按时完成实验,积极参与讨论与交流。

二、实验环境与工具1. 实验环境(1) 操作系统:Windows 7/8/10或Linux。

(2) 编程语言:C/C++、Java或Python。

(3) 开发工具:Visual Studio、Eclipse、IntelliJ IDEA或PyCharm。

2. 实验工具(1) 文本编辑器或集成开发环境(IDE)。

(2) 版本控制系统(如Git)。

(3) 在线编程平台(如LeetCode、牛客网)。

三、实验内容与安排1. 实验一:线性表的基本操作(1) 实现线性表的顺序存储结构。

(2) 实现线性表的插入、删除、查找等基本操作。

(3) 分析线性表的时间复杂度。

2. 实验二:栈与队列的基本操作(1) 实现栈的顺序存储结构。

(2) 实现队列的顺序存储结构。

(3) 实现栈与队列的进栈、出栈、入队、出队等基本操作。

(4) 分析栈与队列的时间复杂度。

3. 实验三:线性表的链式存储结构(1) 实现单链表的结构。

(2) 实现单链表的插入、删除、查找等基本操作。

(3) 分析单链表的时间复杂度。

4. 实验四:树与二叉树的基本操作(1) 实现二叉树的结构。

(2) 实现二叉树的遍历(前序、中序、后序)。

(3) 实现二叉搜索树的基本操作。

(4) 分析树与二叉树的时间复杂度。

5. 实验五:图的基本操作(1) 实现图的邻接矩阵存储结构。

(2) 实现图的邻接表存储结构。

(3) 实现图的深度优先搜索(DFS)和广度优先搜索(BFS)。

(4) 分析图的时间复杂度。

四、实验评价与成绩评定1. 实验评价(1) 代码质量:代码规范、注释清晰、易于维护。

数据结构实验二叉树

数据结构实验二叉树

实验六:二叉树及其应用一、实验目的树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。

二、问题描述首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。

其次,以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。

如算术表达式:a+b*(c-d)-e/f三、实验要求如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算统计叶子结点的个数。

求二叉树的深度。

十进制的四则运算的计算器可以接收用户来自键盘的输入。

由输入的表达式字符串动态生成算术表达式所对应的二叉树。

自动完成求值运算和输出结果。

四、实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境或Visual C++ 程序集成环境五、实验步骤1、根据二叉树的各种存储结构建立二叉树;2、设计求叶子结点个数算法和树的深度算法;3、根据表达式建立相应的二叉树,生成表达式树的模块;4、根据表达式树,求出表达式值,生成求值模块;5、程序运行效果,测试数据分析算法。

六、测试数据1、输入数据:2.2*(3.1+1.20)-7.5/3正确结果:6.962、输入数据:(1+2)*3+(5+6*7);正确输出:56七、表达式求值由于表达式求值算法较为复杂,所以单独列出来加以分析:1、主要思路:由于操作数是任意的实数,所以必须将原始的中缀表达式中的操作数、操作符以及括号分解出来,并以字符串的形式保存;然后再将其转换为后缀表达式的顺序,后缀表达式可以很容易地利用堆栈计算出表达式的值。

例如有如下的中缀表达式:a+b-c转换成后缀表达式为:ab+c-然后分别按从左到右放入栈中,如果碰到操作符就从栈中弹出两个操作数进行运算,最后再将运算结果放入栈中,依次进行直到表达式结束。

如上述的后缀表达式先将a 和b 放入栈中,然后碰到操作符“+”,则从栈中弹出a 和b 进行a+b 的运算,并将其结果d(假设为d)放入栈中,然后再将c 放入栈中,最后是操作符“-”,所以再弹出d和c 进行d-c 运算,并将其结果再次放入栈中,此时表达式结束,则栈中的元素值就是该表达式最后的运算结果。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、引言数据结构是计算机科学中的重要概念,它涉及到组织和管理数据的方式和算法。

数据结构实验是计算机科学专业的必修实践课程之一,通过实验,我们可以探索不同的数据结构类型,并理解它们的优势和应用。

本报告旨在总结我在数据结构实验中的学习和实践经验。

二、实验目的本次实验的主要目的是熟练掌握线性表、二叉树和图等常见数据结构的构建与操作方法。

通过编写代码,我们可以加深对这些数据结构的理解并且通过实验验证其性能。

三、实验过程1.线性表实验:在这一部分,我们使用C++语言实现了顺序表和链表两种线性表的数据结构,并比较了它们在插入、删除、查找等操作上的性能差异。

2.二叉树实验:我们在实验中实现了二叉树的构建和遍历算法,包括前序遍历、中序遍历和后序遍历。

通过实验,我们发现不同的遍历算法对于不同的问题有不同的效果。

3.图实验:本次实验中,我们实现了图的邻接矩阵和邻接表两种存储结构,并比较了它们在图的遍历和搜索等操作上的性能差异。

同时,我们还实现了最小生成树和最短路径算法,这些算法对实际应用具有重要意义。

四、实验结果根据我们的实验结果,我们可以得出以下结论:1.对于插入和删除等频繁变动的操作,链表比顺序表更适合,因为链表的插入和删除操作时间复杂度为O(1),而顺序表的插入和删除操作时间复杂度为O(n)。

2.在二叉树的遍历中,前序遍历是最简单和常用的一种方式,而中序遍历和后序遍历在某些特定情况下更有用。

例如,在寻找路径上的节点时,后序遍历可以更方便地找出叶子节点。

3.在图的存储中,邻接表比邻接矩阵更节省空间,特别在稀疏图的情况下。

而邻接矩阵在搜索操作中更高效,因为邻接矩阵可以在O(1)的时间内检查两个节点之间是否存在边。

4.最小生成树和最短路径算法在实际生活中有很多应用,例如在城市规划和网络布线中。

通过实验可以发现,Prim算法和Dijkstra算法都可以有效地解决这些问题。

五、实验总结通过本次实验,我对线性表、二叉树和图等常见数据结构有了更深入的了解,并且通过实践中的编码和测试,提高了我的编程能力和问题解决能力。

数据结构实验报告(实验)

数据结构实验报告(实验)

数据结构实验报告(实验)数据结构实验报告(实验)1. 实验目的1.1 理解数据结构的基本概念和操作1.2 学会使用数据结构解决实际问题1.3 掌握常用数据结构的实现和应用2. 实验环境2.1 操作系统:Windows 102.2 编程语言:C++2.3 开发工具:Visual Studio3. 实验内容3.1 实验一:线性表的实现和应用3.1.1 设计并实现线性表的基本操作函数3.1.2 实现线性表的插入、删除、查找等功能 3.1.3 实现线性表的排序算法3.1.4 应用线性表解决实际问题3.2 实验二:栈和队列的实现和应用3.2.1 设计并实现栈的基本操作函数3.2.2 设计并实现队列的基本操作函数3.2.3 实现栈和队列的应用场景3.2.4 比较栈和队列的优缺点3.3 实验三:树的实现和应用3.3.1 设计并实现二叉树的基本操作函数3.3.2 实现二叉树的创建、遍历和查找等功能3.3.3 实现树的遍历算法(前序、中序、后序遍历)3.3.4 应用树解决实际问题4. 数据结构实验结果4.1 实验一的结果4.1.1 线性表的基本操作函数实现情况4.1.2 线性表的插入、删除、查找功能测试结果4.1.3 线性表的排序算法测试结果4.1.4 线性表解决实际问题的应用效果4.2 实验二的结果4.2.1 栈的基本操作函数实现情况4.2.2 队列的基本操作函数实现情况4.2.3 栈和队列的应用场景测试结果4.2.4 栈和队列优缺点的比较结果4.3 实验三的结果4.3.1 二叉树的基本操作函数实现情况4.3.2 二叉树的创建、遍历和查找功能测试结果 4.3.3 树的遍历算法测试结果4.3.4 树解决实际问题的应用效果5. 实验分析与总结5.1 实验问题与解决方案5.2 实验结果分析5.3 实验总结与心得体会6. 附件附件一:实验源代码附件二:实验数据7. 法律名词及注释7.1 版权:著作权法规定的对原创作品享有的权利7.2 专利:国家授予的在一定时间内对新型发明享有独占权利的证书7.3 商标:作为标识企业商品和服务来源的标志的名称、符号、图案等7.4 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。

实验6 查找和排序

实验6 查找和排序

实验六、七:查找、排序算法的应用班级 10512 学号 20103051224 姓名苏晓菲一、实验目的1 掌握查找的不同方法,并能用高级语言实现查找算法。

2 熟练掌握顺序表和有序表的顺序查找和二分查找方法。

3 掌握排序的不同方法,并能用高级语言实现排序算法。

4 熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。

二、实验内容1 创建给定的顺序表。

表中共包含八条学生信息,信息如下:学号姓名班级C++ 数据结构1 王立03511 85 762 张秋03511 78 883 刘丽03511 90 794 王通03511 75 865 赵阳03511 60 716 李艳03511 58 687 钱娜03511 95 898 孙胜03511 45 602 使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。

如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

3 使用二分查找方法,从查找表中查找学号为7和12的学生。

如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

(注意:创建静态查找表时必须按学号的从小到大排列!)4 使用直接插入排序方法,对学生信息中的姓名进行排序。

输出排序前和排序后的学生信息表,验证排序结果。

5 使用直接选择排序方法,对学生信息中的C成绩进行排序。

输出排序前和排序后的学生信息表,验证排序结果。

6 使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。

输出排序前和排序后的学生信息表,验证排序结果。

7 编写一个主函数,将上面函数连在一起,构成一个完整程序。

8 将实验源程序调试并运行。

三、实验结果#include<iostream.h>#define maxsize 50typedef int KeyType;KeyType key;typedef struct{int number;int chengji1,chengji2;char name[20];char banji;}DataType;typedef struct{DataType data[maxsize];int len;}Seqlist;void InitSeqlist(Seqlist &L){L.len=0;}void CreateSeqlist(Seqlist &L){cout<<"请输入线性表的长度:";cin>>L.len;cout<<"请输入学生信息:"<<endl<<"学号姓名班级C++ 数据结构"<<endl;for(int i=0;i<L.len;i++){cin>>L.data[i].number>>L.data[i].name>>L.data[i].banji>>L.data[i].chengji1>>L .data[i].chengji2;}cout<<"当前学生信息为:"<<endl;for(int j=0;j<L.len;j++){cout<<L.data[j].number<<" "<<L.data[j].name<<" "<<L.data[j].banji<<" "<<L.data[j].chengji1<<" "<<L.data[j].chengji2;cout<<endl;}}//顺序查找方法void S_Search(SeqList L,char na[20]){int result;for(int i=1;i<=L.len;i++)result=strcmp(L.data[i].name,na);if(result==0){cout<<L.data[i].number<<" "<<L.data[i].name<<" "<<L.data[i].banji<<" "<<L.data[i].score1<<" "<<L.data[i].score2<<endl;break;}}if(i>L.len)cout<<"不存在该学生"<<endl;}//二分查找方法void Binary_Search(SeqList &L,int nu){ int low=1,high=L.len,mid;while(low<=high){mid=(low+high)/2;if(L.data[mid].number==nu){cout<<L.data[mid].number<<" "<<L.data[mid].name<<" "<<L.data[mid].banji<<" "<<L.data[mid].score1<<" "<<L.data[mid].score2<<endl;break;}else if(L.data[mid].number>nu)high=mid-1;else low=mid+1;}if(low>high)cout<<"不存在该学生!"<<endl;}//直接插入排序void InsertSort(SeqList &L){int i, j;for( i=2; i<=L.len; i++ )int result1=strcmp(L.data[i].name , L.data[i-1].name);if (result1<0){L.data[0]=L.data[i]; // 复制为哨兵for(j=i-1;strcmp(L.data[0].name,L.data[j].name)<0; j-- )L.data[j+1]=L.data[j]; // 记录后移L.data[j+1]=L.data[0]; // 插入到正确位置}}}//直接选择排序void SelectSort(SeqList &L){ int i, j,k;DataType temp;for( i=1; i<L.len; i++ ){ k = i;for( j=i+1; j<=L.len; j++ ){if( L.data[j].score1 < L.data[k].score1 )k = j ;}if( k != i ){temp = L.data[i];L.data[i] = L.data[k];L.data[k] =temp;}}}//冒泡排序void BubbleSort(SeqList &L){ int i,j,flag=1; DataType x;for(i=1;((i<L.len)&&(flag==1));i++){ flag=0;for(j=1;j<L.len-i+1;j++)if(L.data[j].score2>L.data[j+1].score2){ x=L.data[j];L.data[j]=L.data[j+1];L.data[j+1]=x; flag=1;}}}void Print_SeqList(SeqList L){for(int i=1;i<=L.len;i++){cout<<L.data[i].number<<" ";cout<<L.data[i].name<<" ";cout<<L.data[i].banji<<" ";cout<<L.data[i].score1<<" ";cout<<L.data[i].score2<<endl;}}void main(){SeqList L;Init_SeqList(L);Create_SeqList(L);char na[20];for(int i=0;i<2;i++){cout<<"请输入要查找的学生姓名:"<<endl;cin>>na;S_Search(L,na);cout<<"----------------------------"<<endl;}int nu;for(int j=0;j<2;j++){cout<<"请输入要查找的学生学号:"<<endl;cin>>nu;Binary_Search(L,nu);cout<<"----------------------------"<<endl;}InsertSort(L);cout<<"按姓名进行排序后的结果:"<<endl;Print_SeqList( L);cout<<"----------------------------"<<endl;SelectSort(L);cout<<"按C++成绩进行排序后的结果:"<<endl;Print_SeqList( L);cout<<"----------------------------"<<endl;BubbleSort(L);cout<<"按数据结构成绩进行排序后的结果:"<<endl;Print_SeqList( L);}程序运行结果如下:四、实验总结在按姓名查找和排序时,忘记字符数组有自己的方法来实现数组的大小比较,应使用strcmp(a,b)方法。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中的重要基础课程,通过实验可以更深入地理解和掌握数据结构的概念、原理和应用。

本次实验的主要目的包括:1、熟悉常见的数据结构,如链表、栈、队列、树和图等。

2、掌握数据结构的基本操作,如创建、插入、删除、遍历等。

3、提高编程能力和解决实际问题的能力,能够运用合适的数据结构解决具体的问题。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容1、链表的实现与操作单向链表的创建、插入和删除节点。

双向链表的实现和基本操作。

循环链表的特点和应用。

2、栈和队列的实现栈的后进先出特性,实现入栈和出栈操作。

队列的先进先出原则,完成入队和出队功能。

3、树的操作二叉树的创建、遍历(前序、中序、后序)。

二叉搜索树的插入、查找和删除操作。

4、图的表示与遍历邻接矩阵和邻接表表示图。

深度优先搜索和广度优先搜索算法的实现。

四、实验步骤及结果1、链表的实现与操作单向链表:首先,定义了链表节点的结构体,包含数据域和指向下一个节点的指针域。

通过创建链表头节点,并使用循环依次插入新节点,实现了链表的创建。

插入节点时,根据指定位置找到插入点的前一个节点,然后修改指针完成插入操作。

删除节点时,同样找到要删除节点的前一个节点,修改指针完成删除。

实验结果:成功创建、插入和删除了单向链表的节点,并正确输出了链表的内容。

双向链表:双向链表节点结构体增加了指向前一个节点的指针。

创建、插入和删除操作需要同时维护前后两个方向的指针。

实验结果:双向链表的各项操作均正常,能够双向遍历链表。

循环链表:使链表的尾节点指向头节点,形成循环。

在操作时需要特别注意循环的边界条件。

实验结果:成功实现了循环链表的创建和遍历。

2、栈和队列的实现栈:使用数组或链表来实现栈。

入栈操作将元素添加到栈顶,出栈操作取出栈顶元素。

实验结果:能够正确进行入栈和出栈操作,验证了栈的后进先出特性。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的1、深入理解和掌握常见的数据结构,如线性表、栈、队列、树、图等。

2、提高运用数据结构解决实际问题的能力。

3、培养编程实践能力和调试程序的技巧。

二、实验环境操作系统:Windows 10编程环境:Visual Studio 2019编程语言:C++三、实验内容(一)线性表的实现与操作1、顺序表的实现定义一个数组来存储线性表的元素。

实现插入、删除、查找等基本操作。

2、链表的实现设计链表节点结构。

完成链表的创建、插入、删除和遍历操作。

(二)栈和队列的应用1、栈的实现与应用用数组或链表实现栈结构。

解决表达式求值问题。

2、队列的实现与应用实现顺序队列和循环队列。

模拟银行排队叫号系统。

(三)树的操作与遍历1、二叉树的创建与遍历采用递归或非递归方法实现先序、中序和后序遍历。

计算二叉树的深度和节点个数。

2、二叉搜索树的操作实现插入、删除和查找操作。

分析其时间复杂度。

(四)图的表示与遍历1、邻接矩阵和邻接表表示图分别用两种方式存储图的结构。

比较它们的优缺点。

2、图的遍历实现深度优先遍历和广度优先遍历。

应用于最短路径问题的求解。

四、实验步骤(一)线性表的实现与操作1、顺序表首先,定义一个足够大的数组来存储元素。

在插入操作中,若数组已满,需要进行扩容操作。

然后,将指定位置后的元素向后移动,插入新元素。

删除操作时,将指定位置后的元素向前移动,覆盖被删除元素。

查找操作通过遍历数组进行。

2、链表设计链表节点包含数据域和指针域。

创建链表时,从空链表开始,逐个插入节点。

插入节点时,根据插入位置找到前一个节点,修改指针链接。

删除节点时,修改相关指针,释放被删除节点的内存。

(二)栈和队列的应用1、栈用数组实现栈时,定义一个数组和一个栈顶指针。

入栈操作将元素放入栈顶指针所指位置,栈顶指针加 1。

出栈操作取出栈顶元素,栈顶指针减 1。

对于表达式求值,将操作数入栈,遇到运算符时弹出操作数进行计算,结果再入栈。

c语言数据结构停车场系统实验报告

c语言数据结构停车场系统实验报告

实验题目:实验六停车场管理一、需求分析1.程序的功能:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列〔大门在最南端,最先到达的第一辆车停放在车场的最北端〕,假设车场内已停满n辆汽车,那么后来的汽车只能在门外的便道上等候,一旦有车开走,那么排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

〔1〕建立静态数组栈作为模拟停车场,动态链表栈作为模拟便道。

〔2〕车辆到达,停入停车场或者便道,记录车牌号,到达时间。

〔3〕车辆离开,记录离开时间,输出停车时间和收费。

将便道内车停入停车场,记录进入时间。

〔4〕列表显示停车场,便道内车辆情况。

〔5〕列表显示历史记录〔已经离开车的车牌号,到达离开时间,收费〕。

2.输入输出的要求:(1)输入:字符串车牌号,到达时间,离开时间(2)输出:停车时间和收费,停车场和便道的停车情况,历史记录。

3.测试数据:二.概要设计4.本程序所用的抽象数据类型的定义ADT Stack{数据对象:D={ai|ai为ElemSet,i为正整数}数据关系:R1={<ai-1,ai>|ai-1,ai都属于D,i为正整数}根本操作:InitStack(&S) //构建一个空栈SDestroyStack(&S) //S 被销毁StackLength(S) //返回S 的元素个数,即栈的长度。

StackEmpty(s) //假设栈S 为空栈,那么返回TRUE,否那么FALE。

GetTop(S, &e) //用e 返回S 的栈顶元素ClearStack(&S) //将S 清为空栈Push(&S, e) //入元素e 为新的栈顶元素。

《数据结构》实验书

《数据结构》实验书

目录实验一线性表基本操作的编程实现 (201)实验二堆栈或队列基本操作的编程实现 (49)实验四二维数组基本操作的编程实现 (18)实验五二叉树基操作的编程实现 (20)实验六图基本操作的编程实现 (45)(特别提示:程序设计包含两个方面的错误。

其一是错误,其二是能错误。

为了提高学生的编程和能力,本指导书给出的程序代码并的两种错误。

并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的要求。

希望大家以自己所学高级语言的基本功和点为基础,不要过于依赖给出的参考代码,这样才能有所进步。

如果学生能够根据要求完全自己编制,那就不好了。

)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结分主要功能,也可以用菜单进行管理完成大部分功能。

还鼓励学生利用基本操作进行一些更实际的应用型程序设计。

【实验性质】【实验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。

建议实现键盘输入数据以实现程序的通据的函数。

【注意事项】【思考问题】1.线性表的顺序存储和链表存储的差异?优缺点分析?2.那些操作引发了数据的移动?3.算法的时间效率是如何体现的?4.链表的指针是如何后移的?如何加强程序的健壮性?【参考代码】(一)利用顺序表完成一个班级学生课程成绩的简单管理1、预定义以及顺序表结构类型的定义(1)#define ListSize //根据需要自己设定一个班级能够容纳的最大学生数(2)typedef struct Stu{int num; //学生的学号char name[10]; //学生的姓名float wuli; //物理成绩float shuxue; //数学成绩float yingyu; //英语成绩}STUDENT; //存放单个学生信息的结构体类型typedef struct List{stu[ListSize]; //存放学生的数组定义,静态分配空间int length; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型2、建立班级的学生信息void listcreate(LIST *Li,int m) //m为该班级的实际人数{int i;Li->length=0;for(i=0;i<m;i++) //输入m个学生的所有信息{printf("please input the %dth student's information:\n",i+1);printf("num=");scanf("%d", ); //输入第i个学生的学号printf("name=");scanf("%s", ); //输入第i个学生的姓名printf("wuli=");scanf("%f", ); //输入第i个学生的物理成绩printf("shuxue=");scanf("%f", ); //输入第i个学生的数学成绩printf("yingyu=");scanf("%f", ); //输入第i个学生的英语成绩Li->length++; //学生人数加1}}3、插入一个学生信息int listinsert(LIST *Li,int i) //将学生插入到班级Li的第i个位置。

实验报告

实验报告
p->right=findchild(a,i1+i-i2,j1-1,b,i+1,j2);
rede *t)
{
if(t!=NULL)
{
cout<<t->data<<" ";
preorder(t->left);
preorder(t->right);
}
}
实验内容
(2)采用广度遍历的方法遍历该二叉树。
二、实验任务:
用广度遍历的方法遍历一棵二叉树。
三、实验准备方案,包括以下内容:
(硬件类实验:实验原理、实验线路、设计方案等)
(软件类实验:所采用的核心方法、框架或流程图及程序清单)
实验原理:Node *findchild(char *a,int i1,int j1,char *b,int i2,int j2)
计算机与信息学院
数据结构实验报告
专业班级物联网工程10-1班
学生姓名及学号蒋海田20102858
课程教学班号
任课教师张晶
实验指导老师张晶
实验地点四号机房
2011~2012学年第1学期
实验序号及名称:实验六广度遍历二叉树
实验时间:2011年12月12日
预习内容
一、实验目的和要求:
(1)运用已学的知识,新建一个二叉树。
一、实验用仪器、设备:
(1)硬件:PC机
(2)环境:Microsoft Visual C++ 6.0
二、实验内容与步骤(过程及数据记录):
三、感想、体会、建议:
越来越难了
实验成绩:
指导老师签名:
年月日
{
if(i1>j1||i2>j2) return NULL;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
G->arc[j][i].a Nhomakorabeaj=1;
}
}
void DepthFristSearch(AdjMatrix g, int i) /*图g为邻接矩阵类型AdjMatrix */
{ int j;
printf("%d",g.vertex[i]);
visited[i]=1;
for (j=0;j<g.vexnum;j++)
[基本要求]
(1)按实验内容编写完整的程序,并上机验证。
(2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
2、源程序
(1)
#include<stdlib.h>
#include<stdio.h>
int visited[20];
typedef struct ArcNode{
int adj;
} ArcNode;
typedef struct
{
int vertex[20];
ArcNode arc[20][20];
int vexnum,arcnum;
}AdjMatrix;
void Create(AdjMatrix *G) /*创建一个有向网*/
实验六
实验名称图及其应用实验性质设计性实验学时数6学时
一、实验目的
1.掌握图的存储结构及其实现。
2.掌握图的深度和广度遍历算法及其实现。
3.掌握图的常见算法的思想及应用。
二、实验内容
1.实现对无向图的存储和遍历等操作。
2.最小生成树问题。
三、




1、实验题目
[问题描述]
以下题目根据自己兴趣和能力可选作一道作为实验题目:
printf("%d",g.arc[i][j].adj);
printf("\t");
}
printf("无向图的遍历:");
TraverseGraph(g);
printf("\n");
return 0;
}












四、实验小结
五、成绩
(1)使用邻接表或邻接矩阵存储一个无向图,实现对其进行深度和广度遍历的操作;
(2)n个城市之间建立通信联络网,最多可能设置n(n-1)/2条线路,那么,如何在这些可能的线路中选择n-1条,以使总的耗费最少。使用最小生成树实现解决此问题。
(3)根据一张自驾游旅游路线图,可以知道城市间的高速公路长度以及该公路要收取的过路费。现在编写一个程序,找出一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出过路费最少的一条路径。
if (!visited[j]&&g.arc[i][j].adj==1)
DepthFristSearch(g,j);
}
void TraverseGraph(AdjMatrix g)
{ int i;
for(i=0;i<g.vexnum;i++)
visited[i]=0;
for(i=0;i<g.vexnum;i++)
{ int i,j,k,n,e;
printf("请输入图中顶点的个数和边数:");
scanf("%d%d",&n,&e);
G->vexnum=n;
G->arcnum=e;
printf("请输入各顶点的值:");
for (i=0;i<G->vexnum;i++)
{
scanf("%d",&G->vertex[i]);
if(!visited[i])
DepthFristSearch(g,i);
}
int main() //主函数
{ int i,j;
AdjMatrix g;
Create(&g);
printf("输出关系二维矩阵:");
for(i=0;i<g.vexnum;i++)
{
for (j=0;j<g.vexnum;j++)
}
for (i=0;i<G->vexnum;i++)
{for(j=0;j<G->vexnum;j++)
G->arc[i][j].adj=0;}
printf("请输入有关联的两个顶点的下标:\n");
for (k=0;k<G->arcnum;k++)
{ scanf("%d%d",&i,&j);
G->arc[i][j].adj=1;
相关文档
最新文档