【学生版】实验六 图基本操作的编程实现
- 格式:doc
- 大小:68.50 KB
- 文档页数:9
南京信息工程大学实验(实习)报告图的基本操作一、实验目的1、熟悉图的存储结构2、掌握图的基本操作二、实验准备1、奔腾2计算机或以上机型2、Microsoft Visual C++ 6.0三、实验内容1、建立一张图2、实现深度优先搜索、广度优先搜索遍历四、实验代码#include<stdio.h>#include<conio.h>#include<stdlib.h>typedef struct ArcNode{int adjVex;struct ArcNode *nextArc;}ArcNode;typedef struct VNode{int data;ArcNode *firstArc;}VNode;//创建一张图void CreatGraphic();//深度优先搜索遍历void DFSTraverse(int searchNode);//广度优先搜索遍历void BFSTraverse(int searchNode);//访问标志置零void ClearVisited();void Bound(char ch, int num);//邻接表VNode *adjList;//访问标记数组short *visited;//循环队列, 用于广度优先搜索遍历函数中int *queue;//图的结点数int graphicNode;//用于判断是否创建了图bool creatGraphic;int main(void){char choice;int searchNode;creatGraphic = false;while (true){if (!creatGraphic){system("CLS");printf(" 图的操作\n");Bound('-', 15);printf(" 1. 创建一张图\n");printf(" 0. 退出程序\n");Bound('-', 15);printf(" 请选择: ");fflush(stdin);choice = getchar();switch (choice){case '1':CreatGraphic();break;case '0':printf("\n");system("PAUSE");return 0;default:printf("\n 输入错误, 按任意键后重新输入!");getch();break;}}else{system("CLS");printf(" 图的操作\n");Bound('-', 20);printf(" 1. 深度优先搜索遍历\n");printf(" 2. 广度优先搜索遍历\n");printf(" 0. 退出程序\n");Bound('-', 20);printf(" 请选择: ");fflush(stdin);choice = getchar();switch (choice){case '1':ClearVisited();Lable1:printf("\n 请输入起始搜索的结点序号: ");fflush(stdin);scanf("%d", &searchNode);if (searchNode>=1 && searchNode <=graphicNode){printf(" 深度优先搜索遍历为: ");DFSTraverse(searchNode);}else{printf(" 序号输入错误, 按任意键后重新输入! \n");getch();goto Lable1;}printf("\n\n");system("PAUSE");break;case '2':ClearVisited();Lable2:printf("\n 请输入起始搜索的结点序号: ");scanf("%d", &searchNode);if (searchNode>=1 && searchNode <=graphicNode){printf(" 广度优先搜索遍历为: ");BFSTraverse(searchNode);}else{printf(" 序号输入错误, 按任意键后重新输入! \n");getch();goto Lable2;}printf("\n\n");system("PAUSE");break;case '0':printf("\n");system("PAUSE");return 0;default:printf("\n 输入错误, 按任意键后重新输入!");getch();break;}}}}void CreatGraphic(){int number;int localNode, linkNode;ArcNode *tempNode;Flag:printf("\n 请输入图的顶点数: ");fflush(stdin);scanf("%d", &graphicNode);if (graphicNode <= 0){printf(" 输入错误, 按任意键后重新输入!\n");getch();goto Flag;}if ((adjList=(VNode *)malloc(sizeof(VNode)*graphicNode)) == NULL){printf(" 内存空间不足, 无法创建图!\n");system("PAUSE");exit(0);}if ((visited=(short *)malloc(sizeof(short)*graphicNode)) == NULL){printf(" 内存空间不足, 无法创建访问记录表!\n");system("PAUSE");exit(0);}if ((queue=(int *)malloc(sizeof(int)*graphicNode)) == NULL){printf(" 内存空间不足, 无法创建队列!\n");system("PAUSE");exit(0);}for (number=0; number<graphicNode; ++number){adjList[number].data = number + 1;adjList[number].firstArc = NULL;}printf("\n 请输入所要创建的图中所有相关联的顶点, 格式( 图中一顶点与此顶点相关联的顶点)\n");do{printf(" 请输入( 注意: 输入0 0 结束输入): ");fflush(stdin);scanf("%d %d", &localNode, &linkNode);if (localNode>=1 && localNode<=graphicNode && linkNode>=1 && linkNode<=graphicNode){if ((tempNode = (ArcNode *)malloc(sizeof(ArcNode))) == NULL){printf(" 内存不足, 无法创建图!\n");exit(0);}tempNode->adjVex = linkNode;tempNode->nextArc = adjList[localNode - 1].firstArc;adjList[localNode - 1].firstArc = tempNode;}else{creatGraphic = true;return;}}while(true);}void DFSTraverse(int searchNode){ArcNode *tempNode;visited[searchNode - 1] = 1;printf("%d ", searchNode);tempNode = adjList[searchNode - 1].firstArc;while (tempNode != NULL){if (visited[tempNode->adjVex - 1] == 0){DFSTraverse(tempNode->adjVex);}tempNode = tempNode->nextArc;}}void BFSTraverse(int searchNode){ArcNode *tempNode;int nodeNum;int front = 0, rear = 0;printf("%d ", searchNode);visited[searchNode - 1] = 1;rear = (rear + 1) % graphicNode;queue[rear] = searchNode;while (front != rear){front = (front + 1) % graphicNode;nodeNum = queue[front];tempNode = adjList[nodeNum - 1].firstArc;while (tempNode != NULL){if (visited[tempNode->adjVex - 1] == 0){visited[tempNode->adjVex - 1] = 1;printf("%d ", tempNode->adjVex);rear = (rear + 1) % graphicNode;queue[rear] = tempNode->adjVex;}tempNode = tempNode->nextArc;}}}void ClearVisited(){int cnt;for (cnt=0; cnt<graphicNode; ++cnt){visited[cnt] = 0;}}void Bound(char ch, int num){while (num--){putchar(ch);}putchar('\n');}(本次实验中所用图示意图)(图1:按格式创建图)1876 5 4 3 2(图2:深度优先搜索遍历)(图3:广度优先搜索遍历)五、实验总结…。
图的基本操作实验报告图的基本操作实验报告引言:图是一种常见的数据结构,广泛应用于计算机科学和其他领域。
本实验报告旨在介绍图的基本操作,包括创建图、添加节点和边、遍历图等,并通过实验验证这些操作的正确性和效率。
实验目的:1. 了解图的基本概念和术语;2. 掌握图的创建和修改操作;3. 熟悉图的遍历算法;4. 分析图的操作的时间复杂度。
实验过程:1. 创建图首先,我们需要创建一个图对象。
图可以用邻接矩阵或邻接表来表示。
在本实验中,我们选择使用邻接表来表示图。
通过遍历输入的节点和边信息,我们可以创建一个包含所有节点和边的图。
2. 添加节点和边在创建图对象后,我们可以通过添加节点和边来构建图的结构。
通过输入节点的标识符和边的起始和结束节点,我们可以在图中添加新的节点和边。
添加节点和边的操作可以通过修改邻接表来实现,将节点和边的信息存储在对应的链表中。
3. 遍历图遍历图是图操作中常用的操作之一。
通过遍历图,我们可以访问图中的所有节点和边。
在本实验中,我们选择使用深度优先搜索(DFS)算法来遍历图。
DFS算法通过递归的方式遍历图中的节点,先访问当前节点,然后再递归地访问与当前节点相邻的节点。
4. 分析时间复杂度在实验过程中,我们记录了图的操作所花费的时间,并分析了它们的时间复杂度。
通过对比不同规模的图的操作时间,我们可以评估图操作的效率和可扩展性。
实验结果:通过实验,我们成功创建了一个图对象,并添加了多个节点和边。
我们还通过DFS算法遍历了图,并记录了遍历的顺序。
实验结果表明,我们的图操作实现正确,并且在不同规模的图上都能够高效地工作。
讨论与结论:本实验报告介绍了图的基本操作,并通过实验验证了这些操作的正确性和效率。
通过实验,我们了解到图是一种重要的数据结构,可以用于解决许多实际问题。
同时,我们还深入分析了图操作的时间复杂度,为后续的图算法设计和优化提供了参考。
总结:通过本次实验,我们对图的基本操作有了更深入的了解。
(完整版)数据库技术与应用实验报告《数据库技术与应用》实验报告班级学号:姓名:实验日期:指导老师:实验名称一、实验一表的建立与维护实验目的与要求 1.初步掌握根据一个应用目标把现实问题抽象为关系数据模型的方法,从而为解决实际问题奠定数据基础。
2.掌握表的建立与维护的一般方法。
3.理解表的记录指针与当前记录的意义。
4.掌握表的打开、关闭、浏览、显示等操作方法。
5.掌握表结构的修改。
6.掌握记录的增加与删除等操作。
7.掌握数据复制方法。
8.二、实验准备 1、复习关系数据库的有关概念,深刻理解Virsual FoxPro中所采用的关系模型的实质及Virsual FoxPro所支持的数据模型。
2、复习表的建立、现实与维护等操作。
三、实验内容下表是某校学生花名册,根据该表完成以下操作,写出操作步骤。
学习成绩性学号姓名别学 009901 张小强男 98 85 否 20XX年获全数外语出生年月否少数民族受奖情况国数学奥林匹克竞赛二等奖。
009902 009903 009904 009905 陈斌李哲男男 88 56 75 88 75 82 72 81 否是否是20XX年获全国中学生田径运动会100米第三名009906 009907 009908 009909 张青松男封小莉女周晓钱倩女女 65 82 65 83 81 73 78 85 否否20XX年获广东省三好学生称号 009910 009911 孙力军男肖彬彬女 64 55 68 95 是否赵大明男冯珊女否否1.设计一个表的结构,使其能描述上表的信息,同时又符合关系模型的基本要求。
2.建立表,输入表中的数据,并将保存在自己盘中。
3.给全部女生的数学成绩加5分。
4.将记录指针定位到第5号记录。
5.将记录指针指向孙力军同学。
6.显示所有姓“张”学生的情况。
7.把表的姓名字段宽度修改为8。
8.浏览记录数据,且表头用汉字。
9.把少数民族学生的记录复制到中。
实验六图的应用及其实现一、实验目的1.进一步功固图常用的存储结构。
2.熟练掌握在图的邻接表实现图的基本操作。
3.理解掌握AOV网、AOE网在邻接表上的实现以及解决简单的应用问题。
二、实验内容从键盘上输入AOV网的顶点和有向边的信息,建立其邻接表存储结构,然后对该图拓扑排序,并输出拓扑序列. 试设计程序实现上述AOV网的类型定义和基本操作,完成上述功能。
相关常量及结构定义:typedef int InfoType;typedef char VertexType;typedef int SElemType;#define STACK_INIT_SIZE 100 //存储空间初始分配量#define STAXKINCREMENT 10 //存储空间分配增量#define MAX_VERTEX_NUM 20typedef struct ArcNode{int adjvex;struct ArcNode *nextarc;InfoType *info;}ArcNode;typedef struct VNode{VertexType data;struct ArcNode *firstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedef struct ALGraph{AdjList vertices;int vexnum, arcnum;int kind;}ALGraph;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;设计相关函数声明:int CreateDG(ALGraph &G)int InitStack(SqStack &S)int Push(SqStack &S,SElemType e)int Pop(SqStack &S,SElemType &e)int StackEmpty(SqStack S)void FindInDegree(ALGraph G,int *indegree)int TopologicalSort(ALGraph G)三、数据结构与核心算法的设计描述1.创建AOV网int CreateDG(ALGraph &G){int i,j,k,v1,v2;cout<<"请输入该图的顶点数:"<<"请输入该图的边数:"<<endl;cin>>G.vexnum>>G.arcnum;for(i=0;i<G.vexnum;i++){G.vertices[i].data=i;G.vertices[i].firstarc=NULL;}cout<<"请输入一条边的始点和终点:"<<endl;for(k=0;k<G.arcnum;++k){cout<<"请输入第 "<<k+1<<"条边的始点和终点: ";cin>>v1>>v2;i=v1; j=v2;while(i<1||i>G.vexnum||j<1||j>G.vexnum){cout<<"请输入第 "<<k+1<<"条边的始点和终点: ";cin>>v1>>v2;i=v1; j=v2;}i--;j--;ArcNode *p;p=(ArcNode *)malloc(sizeof(ArcNode));if(!p) return -1;p->adjvex=j;p->nextarc=G.vertices[i].firstarc;p->info=NULL; G.vertices[i].firstarc=p;G.vertices[i];}return 0;}2.初始化栈int InitStack(SqStack &S){S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType ));if(!S.base) exit (-1);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 0;}3.入栈int Push(SqStack &S,SElemType e){if(S.top-S.base>=S.stacksize){S.base=(SElemType*)realloc(S.base,(S.stacksize+STAXKINCREMENT)*sizeof(SElemType));if(!S.base) exit (-1);S.top=S.base+S.stacksize;S.stacksize+=STAXKINCREMENT;}*S.top++=e;return 0;}4.出栈精选文库int Pop(SqStack &S,SElemType &e){if(S.top==S.base) return -1;e=*--S.top;return 0;}5.判断栈是否为空int StackEmpty(SqStack S){if(S.top==S.base) return -1;else return 0;}6.个顶点入度void FindInDegree(ALGraph G,int *indegree){int i;for(i=0;i<G.vexnum;i++)indegree[i]=0;for(i=0;i<G.vexnum;i++)while(G.vertices[i].firstarc){indegree[G.vertices[i].firstarc->adjvex]++;G.vertices[i].firstarc=G.vertices[i].firstarc->nextarc;}}7.拓扑排序int TopologicalSort(ALGraph G){int i,k,indegree[MAX_VERTEX_NUM];ArcNode *p;SqStack S;FindInDegree(G,indegree);InitStack(S);for(i=0;i<G.vexnum;i++)if(!indegree[i]) Push(S,i);int count=0;while(!StackEmpty(S)){Pop(S,i);cout<<i+1<<'\t'; ++count;for(p=G.vertices[i].firstarc; p; p=p->nextarc){k=p->adjvex;if(!(--indegree[k])) Push(S,k);}}if(count<G.vexnum) return -1;else return 0;}四、函数的调用主函数主要设计:int main(){ALGraph G;CreateDG(G);TopologicalSort(G);return 0;}五、实验总结本次试验通过对有向图进行拓扑排序,我了解了有向图邻接表的存储结构更重要的的是学会了对有向图的拓扑排序算法,其中也将之前学过的栈结合起来,巧妙的找到了一个拓扑序列,可不足的是,该算法只能找到这一条拓扑序列,但是我相信通过完成了这次试验后我会改进算法而能将图的所有的拓扑序列找出来。
实验六图基本操作的编程实现【实验目的】图基本操作的编程实现要求:图基本操作的编程实现(2学时,验证型),掌握图的建立、遍历、插入、删除等基本操作的编程实现,存储结构可以在顺序结构、链接结构、联合使用多种结构等中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】编程对图进行存储(邻接矩阵或邻接表都可以,由学生自由选择),之后可以询问任何两个结点之间是否有通路和路径数。
设计一个将图形转成邻接链表的程序。
设计一个深度优先搜索法来查找图形的程序。
设计一个广度优先搜索法来查找一个图形的程序。
鼓励开发出难度更高的程序。
【思考问题】1、图的定义和特性?2、图的主要存储结构是什么?是独立的某种还是多种数据结构的综合?3、图的主要遍历思路是哪些?4、举出图的应用范例?【参考代码】(一)将一个将图转成邻接矩阵的程序、/*程序构思:*//*用户输入结点与各个边,再将边转成邻接矩阵。
*/#include<stdio、h>#define Max6 /* 定义最大可输入的结点个数 */int Graph[Max][Max]; /*图形邻接数组*//*===============================================*//*输出邻接矩阵数据===============================*//*====================== =========================*/void print_M_Graph(){ int i,j; printf("Vertice"); for (i=0;i<Max;i++)printf("%3d",i); printf("\n"); for(i=0;i<Max;i++){ printf("%4d ",i); for (j=0;j<Max;j++)printf("%3d" );printf("\n"); }}/*======================================= ========*//*以邻接矩阵建立图形=============================*//*======================== =======================*/void Create_M_Graph(int Verticel,int Vertice2){ Graph[Verticel][Vertice2]=1; /* 将矩阵内容设为1*/ }/*===============================================*//*主程序=========================================*//*===============================================*/void main(){ int Source; /*起始顶点*/ int Destination; /*终止顶点*/ int i,j; for (i=0;i<Max;i++)for (j=0;j<Max;j++)Graph[i][i]=0; while(1){ printf("please input the Edge's source:");scanf("%d",&Source); if(Source ==-1)break; printf("Please input the Edge's Destination:"); scanf("%d",&Destination); if(Source==Destination) /* 出错:自身循环*/ printf("***Error***:Self Loop!! \n"); else if (Source >= Max || Destination >= Max)/* 出错:超出范围*/ printf ("***Error***:out of range!! \n"); else /*调用建立邻接数组 */ Create_M_Graph(Source,Destination); }printf("##Graph##\n"); ; /*调用输出邻接数组数据*/}/*希望的结果 *//*please input the Edge's source:0 *//*Please input the Edge's Destination:4 *//*please input the Edge's source:1 *//*Please input the Edge's Destination:0 *//*please input the Edge's source:1*//*Please input the Edge's Destination:4 *//*please input the Edge's source:2 *//*Please input the Edge'sDestination:1 *//*please input the Edge's source:3*//*Please input the Edge's Destination:2 *//*please input the Edge's source:4 *//*Please input the Edge's Destination:3 *//*please input the Edge's source:-1*//*##Graph## *//*Vertice 012345 *//* 0 0 0 0 01 0 *//*11 0 0 01 0 */ /*2 01 0 0 0 0 */ /*3 0 01 0 0 0 */ /*4 0 0 01 0 0 */ /*5 0 0 0 0 0 0 */(二)将一个将图转成邻接表的程序、/*程序构思:*//*用户输入结点与各个边,再将边转成邻接链表。
实验一:简单的C程序设计(2学时)一、实验方式:一人一机二、实验目的:1、了解C语言程序的编译环境和编写过程。
2、掌握C语言程序在Visual C++ 6.0环境下的调试过程。
3、初步了解C语言程序的特点。
4、掌握C语言的数据类型。
三、实验内容:1、计算两个数x和y的和。
(教材P5【例1-2】)2、从键盘输入华氏温度h,输出摄氏温度c(摄氏温度=5/9*(华氏温度-32))。
(实验教材P18)3、给定圆环,输入内圆环半径r1、外圆环半径r2,求出圆环的面积。
(实验教材P27)4、从键盘上输入两个整数x、y,实现两个数的交换,并求出最大值、最小值和两个数的平均值。
(实验教材P21)5、输入并运行以下程序,分析运行结果。
(实验教材P27)#include <stdio.h>void main( ){int i,j;i=8; j=10;printf(“%d,%d\n”,++i,++j);i=8; j=10;printf(“%d,%d\n”,i++,j++);i=8; j=10;printf(“%d,%d\n”,++i,i);i=8; j=10;printf(“%d,%d\n”,i++,i);}四、实验程序代码:五、实验运行结果(截图):实验二:顺序结构程序设计(2学时)一、实验方式:一人一机二、实验目的:1、掌握标识符、常量、变量的定义及使用。
2、掌握C语言的常用运算符及表达式。
3、掌握单分支if语句的使用方法。
4、掌握双分支if-else语句的使用方法。
三、实验内容:1、从键盘输入一个3位整数,请输出该数的逆序数。
(实验教材P27)2、输入3个字符型数据,将其转换成相应的整数后,求它们的平均值并输出。
(实验教材P27)3、判断箱子是正方体还是长方体。
(实验教材P33)4、有一函数: x (x<1)y= 2x-1 (1≤x<10)3x-11 (x≥10) 编写程序,输入x值,输出y值。
实验六图基本操作的编程实现【实验目的】图基本操作的编程实现要求:图基本操作的编程实现(2学时,验证型),掌握图的建立、遍历、插入、删除等基本操作的编程实现,存储结构可以在顺序结构、链接结构、联合使用多种结构等中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】编程对图进行存储(邻接矩阵或邻接表都可以,由学生自由选择),之后可以询问任何两个结点之间是否有通路和路径数。
设计一个将图形转成邻接链表的程序。
设计一个深度优先搜索法来查找图形的程序。
设计一个广度优先搜索法来查找一个图形的程序。
鼓励开发出难度更高的程序。
【思考问题】1.图的定义和特性?2.图的主要存储结构是什么?是独立的某种还是多种数据结构的综合?3.图的主要遍历思路是哪些?4.举出图的应用范例?【参考代码】(一)基础篇//将一个图采用邻接表存储,并在该存储方法上进行深度优先遍历.//程序构思://用户键盘输入结点与各条边,再将边转成邻接链表。
//然后对采用邻接表表示的图进行深度优先遍历。
#include<stdio.h>#include <stdlib.h>#define vertexnum 100 //定义最大可输入的结点个数typedef struct node //定义图形的顶点结构{int vertex; //图中的顶点信息为数字struct node *next;}Graph;Graph head[vertexnum]; //邻接表的表头结点int Visited[vertexnum]; //遍历记录void Create_l_Graph(int Vertex1,int Vertex2,int no){ //以邻接链表建立图形Graph *searchP; //结点声明Graph *New; //新结点声明New=(Graph *)malloc(sizeof(struct node));if (New!= NULL ){New->vertex=Vertex2;New->next=NULL;searchP=&(head[Vertex1]);while(searchP->next!=NULL)searchP=searchP->next;searchP->next =New;if(no==0){New=(Graph *)malloc(sizeof(struct node));New->vertex=Vertex1;New->next=NULL;searchP=&(head[Vertex2]);while(searchP->next!=NULL)searchP=searchP->next;searchP->next =New;}}}void showmenu(){ //显示菜单printf(" 欢迎使用图的操作演示软件\n");printf("\t1、创建图的邻接表\n");printf("\t2、图的输出\n");printf("\t3、图的深度优先遍历\n");printf("\t4、退出程序\n");}void print_l_graph(Graph *head){ //输出邻接链表的数据Graph *searchP;searchP=head->next;while(searchP!=NULL){}printf("\n");}void DFS(int vertex){ //深度优先遍历Graph *SearchP; //结点声明//标记某个结点已遍历过printf("[%d]==>",vertex);SearchP=head[vertex].next;while(SearchP!=NULL){if( ) //判断结点未被遍历过//递归调用深度优先遍历函数 SearchP=SearchP->next; //下一个邻接点}}void main(){int source; //图中一条边的起始顶点int destination; //图中一条边的终止顶点int i,j;int vermax; //定义图中最大的顶点数int edgemax; //定义图中最大的边数int choice;int no;while(1){showmenu();printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);//清除键盘缓冲区switch(choice){case 1:printf("请输入图的类别(有向图-1,无向图-0):");scanf("%d",&no);printf("请输入图中的总顶点数和边数:");scanf("%d%d",&vermax,&edgemax);for(i=1;i<vermax;i++){head[i].vertex = i;head[i].next = NULL;}for(i=1;i<=edgemax;i++){printf("请输入第%d条边的起点:",i);scanf("%d",&source);printf("请输入第%d条边的终点:",i);scanf("%d",&destination);if(source==destination)printf("输入有误!\n");//出错:自身循环else //调用建立邻接链表 Create_l_Graph(source,destination,no);}printf("图创建成功,按任意键继续…\n");getch();system("cls");break;case 2:printf("图的邻接表如下:\n");for(i=1;i<=vermax;i++){printf("顶点[%d]:",i);print_l_graph(&head[i]);//调用输出邻接链表数据}printf("\n");system("pause");system("cls");break;case 3:for(i=1;i<=vermax;i++)Visited[i]=0;printf("请输入遍历的起点:");scanf("%d",&source);printf("图的深度优先遍历结果为:\n");DFS(source);printf("END\n");system("pause");system("cls");break;case 4:return;default:printf("你的输入有误,请从新输入!\n");system("pause");system("cls");}}}(二)提高篇//将一个图采用邻接表存储,并在该存储方法上进行深度优先遍历..//程序构思://用户键盘输入结点与各个边,再将边转成邻接链表。
小学六年级综合实践教案学习简单的计算机操作和编程知识一、引言在当今信息化的社会环境下,计算机已经成为人们生活和工作中不可或缺的工具。
为了让小学六年级的学生能够更好地适应这个时代的发展,培养他们的计算机操作和编程能力是非常重要的。
本教案旨在通过综合实践的方式,让学生学习简单的计算机操作和编程知识。
二、教学目标1.了解计算机的基本组成和工作原理。
2.掌握常用的计算机操作技能,如开机、关机、登录、打开和关闭程序等。
3.了解计算机编程的基本概念和方法。
4.能够运用Scratch软件进行简单的图形化编程实践。
三、教学内容1.计算机基础知识a.计算机的基本组成-硬件:包括中央处理器、内存、硬盘等。
-软件:包括操作系统、应用程序等。
b.计算机的工作原理-输入、处理、输出。
2.计算机操作技能a.开机、关机-正确连接电源线,按下开机按钮/选择关机选项。
b.登录和注销-输入用户名和密码,选择登录/注销选项。
c.打开和关闭程序-使用鼠标点击程序图标来打开和关闭程序。
3.计算机编程基础a.什么是编程-编程是指根据特定的算法和语言,编写计算机程序来实现特定功能。
b.编程工具介绍-介绍Scratch软件的界面和基本功能。
4.使用Scratch进行编程实践a.创建一个新的项目-选择新建项目,进入Scratch的编辑界面。
b.绘制图形化角色-使用Scratch提供的绘图工具,绘制自己的角色。
c.编写简单的脚本-通过拖动和连接各种积木块,编写角色的行为脚本。
d.运行和测试程序-点击运行按钮,测试编写的程序是否能够实现预期的功能。
四、教学过程1.导入新知识-介绍计算机的基本组成和工作原理,引发学生对计算机的兴趣和好奇心。
2.教授计算机操作技能-逐步演示开机、关机、登录和注销等操作步骤。
-让学生自己操作计算机,巩固所学的技能。
3.讲解计算机编程基础-用简单的语言解释什么是编程,为学生打下编程的基础知识。
4.实践编程-引导学生打开Scratch软件,创建一个新项目。
OS实验六《操作系统》实验报告实验三进程管理及进程通信⼀.实验⽬的利⽤Linux提供的系统调⽤设计程序,加深对进程概念的理解。
体会系统进程调度的⽅法和效果。
了解进程之间的通信⽅式以及各种通信⽅式的使⽤。
⼆.实验准备复习操作系统课程中有关进程、进程控制的概念以及进程通信等内容(包括软中断通信、管道、消息队列、共享内存通信及信号量概念)。
熟悉本《实验指导》第五部分有关进程控制、进程通信的系统调⽤。
它会引导你学会怎样掌握进程控制。
阅读例程中的程序段。
三.实验⽅法⽤vi 编写c 程序(假定程序⽂件名为prog1.c)编译程序$ gcc -o prog1.o prog1.c 或$ cc -o prog1.o prog1.c运⾏$./prog1.o四.实验内容及步骤⽤v i编写使⽤系统调⽤的C语⾔程序。
1.编写程序。
显⽰进程的有关标识(进程标识、组标识、⽤户标识等)。
经过5 秒钟后,执⾏另⼀个程序,最后按⽤户指⽰(如:Y/N)结束操作。
编译运⾏结果:2.编写程序。
实现⽗进程创建⼀个⼦进程。
体会⼦进程与⽗进程分别获得不同返回值,进⽽执⾏不同的程序段的⽅法。
编译运⾏:思考:⼦进程是如何产⽣的?⼜是如何结束的?⼦进程被创建后它的运⾏环境是怎样建⽴的?答:⼦进程由fork()函数创建,通过exit()函数⾃我结束,⼦进程被创建后核⼼将为其分配⼀个进程表项和进程标识符,检查同时运⾏的进程数⽬,并且拷贝进程表项的数据,由⼦进程继承⽗进程的所有⽂件。
3.编写程序。
⽗进程通过循环语句创建若⼲⼦进程。
探讨进程的家族树以及⼦进程继承⽗进程的资源的关系。
程序如下:编译运⾏:思考:①画出进程的家族树。
⼦进程的运⾏环境是怎样建⽴的?反复运⾏此程序看会有什么情况?解释⼀下。
183922472248 2252 22542249 2251 22532250每⼀次运⾏返回的进程号都不相同,但是都符合家族进程树,出现这样的情况是由于系统本⾝就是随机分配进程号的。
新版教科版小学六年级上册信息技术实验目录一、实验一:计算机的启动和关闭此实验通过研究计算机的启动和关闭过程,使学生了解计算机系统的基本结构和操作步骤。
二、实验二:文件的创建和保存在此实验中,学生将研究如何在计算机上创建和保存文件,掌握文件操作的基本技巧。
三、实验三:网页的设计和制作四、实验四:图片的处理和编辑此实验旨在教授学生如何处理和编辑图片,学生将研究基本的图片编辑技巧,如裁剪、调整大小等。
五、实验五:图形的绘制和变换在本实验中,学生将研究如何使用计算机绘制图形,并且研究图形的基本变换和操作。
六、实验六:多媒体的应用通过研究多媒体的应用,学生将了解多媒体的基本概念和应用领域,并能够制作简单的多媒体作品。
七、实验七:计算机网络的基本使用此实验将使学生了解计算机网络的基本概念和使用方法,研究网络浏览器的基本操作和网络安全的知识。
八、实验八:信息检索和利用在本实验中,学生将研究如何使用搜索引擎进行信息检索,以及如何有效利用检索到的信息。
九、实验九:简单的编程设计通过研究简单的编程设计,学生将了解计算机编程的基本原理和逻辑,能够使用基本的编程语言进行简单的编程。
十、实验十:信息安全和防护此实验旨在教授学生关于信息安全和防护的基本知识和技能,提高学生的信息安全意识和防范能力。
十一、实验十一:电子邮件的发送和接收在本实验中,学生将研究如何使用电子邮件发送和接收邮件,掌握电子邮件的基本操作和礼仪。
十二、实验十二:计算机故障的排除与维修通过本实验的研究,学生将了解计算机故障排除与维修的基本方法和技巧,提高自己解决计算机问题的能力。
以上为新版教科版小学六年级上册信息技术实验目录,每个实验都涉及不同的主题和技能,旨在帮助学生全面掌握信息技术的基本知识和应用能力。
通过实验的学习,学生将能够熟练操作计算机、使用常见办公软件,并具备一定的网页制作和简单编程能力。
图的基本操作实验报告图的基本操作实验报告一、引言图是计算机科学中常用的数据结构之一,它由节点和边组成,用于表示事物之间的关系。
图的基本操作是对图进行增、删、改、查等操作,本实验旨在通过编程实现图的基本操作,加深对图的理解。
二、实验目的1. 理解图的基本概念和表示方法;2. 掌握图的基本操作,包括节点的插入、删除,边的添加、删除等;3. 运用图的基本操作解决实际问题。
三、实验方法本实验使用Python编程语言实现图的基本操作。
首先,定义图类,包括图的初始化、节点的插入、删除,边的添加、删除等方法。
然后,根据实际需求设计测试用例,验证图的基本操作的正确性。
四、实验过程1. 图的初始化在图类的初始化方法中,创建一个空的字典用于存储节点和边的信息。
节点用唯一的标识符表示,边用包含两个节点标识符的元组表示。
2. 节点的插入编写节点插入方法,接收节点标识符作为参数,将节点添加到图中。
在添加节点时,需要判断节点是否已存在于图中,如果存在则不进行插入操作。
3. 节点的删除编写节点删除方法,接收节点标识符作为参数,将节点从图中删除。
在删除节点时,需要同时删除与该节点相关的边。
4. 边的添加编写边添加方法,接收两个节点标识符作为参数,将边添加到图中。
在添加边时,需要判断节点是否存在于图中,如果不存在则先进行节点的插入操作。
5. 边的删除编写边删除方法,接收两个节点标识符作为参数,将边从图中删除。
在删除边时,需要判断边是否存在于图中。
6. 测试用例设计设计多个测试用例,包括插入节点、删除节点、添加边、删除边等操作,并验证操作的正确性。
七、实验结果经过多次测试,图的基本操作均能正常运行,符合预期结果。
通过图的基本操作,可以方便地对图进行增、删、改、查等操作,解决实际问题。
八、实验总结通过本次实验,我深入理解了图的基本概念和表示方法,并掌握了图的基本操作。
图作为一种重要的数据结构,在计算机科学中有着广泛的应用,例如社交网络分析、路线规划等领域。
1 《数据结构》实验报告书实验内容:图的基本操作学院班级:计算机学院计算机科学与技术姓名:***学号:2011008******指导老师:高老师2前言计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习计算机编程仅仅了解计算机语言是不够的,还必须掌握数据的组织、存储和运算的一般方法,这便是数据结构课程中所研究的内容,也是我们编写计算机程序的重要基础,由于它对计算机学科起到承前启后的作用,因此本课程被列为计算机等相关专业最重要的专业基础课;同时数据结构是计算机专业教学的一门核心课程。
计算机各领域都要用到各种数据结构,而且要从事计算机科学与技术工作,尤其是计算机领域的软件开发工作,必须具备较强的数据结构基础。
数据结构课程内容丰富、学习量大,实践性强;隐含在各部分内容中的方法和技术多;算法设计具有动态性和抽象性等特点,看懂听明白与掌握会应用之间有相当大的一段距离。
所以学生必须多实践才能进一步加深对课程的理解,理解和掌握算法设计所需的方法和技术,为整个专业学习打下良好的基础。
图的基本操作实验目的1、使学生可以巩固所学的有关图的基本知识。
2、熟练掌握图的存储结构。
3、熟练掌握图的两种遍历算法。
实验内容[问题描述]对给定图,实现图的深度优先遍历和广度优先遍历。
[基本要求]以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。
以用3 户指定的结点为起点,分别输出每种遍历下的结点访问序列。
【测试数据】由学生依据软件工程的测试技术自己确定。
实验前的准备工作1、掌握图的相关概念。
2、掌握图的逻辑结构和存储结构。
3、掌握图的两种遍历算法的实现。
算法设计图的深度优先:类似树的先根遍历,初始状态所有顶点未曾被访问,则深度优先从图中某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直到图中所有和v有路径相通的顶点都被访问到,若此图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点重复上述过程直到所有的顶点都被访问。
实验六图基本操作的编程实现【实验目的】图基本操作的编程实现要求:图基本操作的编程实现(2学时,验证型),阅读程序功能方面要求掌握图的建立、遍历、插入、删除等基本操作的编程实现,程序设计方面要求掌握图的遍历。
存储结构可以在顺序结构、链接结构等中选择,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】一、在给出的程序代码基础上,首先排除遇到的语法问题,然后通过填空完成遍历的任务,通过自己绘制的图形进行验证。
本部分资料直接通过.cpp文件直接给出。
请注意下载。
为了保证在实验时间内完成,最好提前预习。
涉及的主要问题包括:常用语句出错了。
基础部分的结点存储结构的一维数组设计需要自己写。
图的数据结构定义部分。
显示图的结构。
主要遍历的功能设计。
存储结构主要是邻接矩阵,最后可以通过提供参考答案来对比。
邻接表的程序代码删除了更多的部分,且不提供参考答案,供有能力的学生自己研究。
二、如果希望自行独立编程,可以实现对图进行存储(邻接矩阵或邻接表都可以,学生自由选择),之后可以询问任何两个结点之间是否有通路和路径数。
以下的题目都可以作为独立编程的题目设计一个将图形转成邻接链表的程序。
设计一个深度优先搜索法来查找图形的程序。
设计一个广度优先搜索法来查找一个图形的程序。
鼓励开发出难度更高的程序。
【思考问题】1.图的定义和特性?2.图的主要存储结构是什么?是独立的某种还是多种数据结构的综合?3.图的主要遍历思路是哪些?4.举出图的应用范例?【参考代码】//图类const int maxvertices=26;//定义结点个数最大值为26const int maxweight=10000;//当两个结点之间不存在边时距离无穷大用10000来模拟class graph{private:int i,j; //循环变量int flag; //标志位int inputnodenum,inputedgenum; //输入的结点个数、边数int numofedges; //记录边的条数char *nodearray; //输入结点时使用的一维数组SeqList Vertices; //图的结点信息,启用了线性表int Edge[maxvertices][maxvertices]; //图的边信息,使用了二维数组,是一个方阵public:graph(const int size=maxvertices); //图的构造函数~graph(){}; //图的析构函数void initializationofEdge(int size); //边的邻接矩阵初始化void inputdata(); //手工输入数据void defaultdata(); //启用默认数据void showgraph(); //显示图的邻接矩阵void showVertex(); //显示图的结点int graphempty()const{return Vertices.ListEmpty();}//判断图是否为空int numofVertices(){return Vertices.ListSize();} //求图的结点个数int numofEdges(void){return numofedges;} //求图的边数char getvalue(const int i); //求取图某个结点的值int getweight(const int nodestart,const int nodeend);//求两个结点之间的边的权值void insertVertices(const char& vertices); //向图中添加一个结点int deleteVertex(const int v); //删除一个结点int insertEdge(const int nodestart,const int nodeend,int weight);//添加一条边int deleteEdge(const int nodestart,const int nodeend);//删除一条边int getfirstneighbor(const int v);//为实现图的遍历而必须定义的求取其第一个相邻结点的函数int getnextneighbor(const int nodestart,const int nodeend);//求取其下一个相邻结点的函数void depthfirstsearch(const int v,int visited[],void visit(char item));//深的优先遍历void breadthfirstsearch(const int v,int visited[],void visit(char item));//广度优先遍历};void graph::depthfirstsearch(const int startpoint,int visited[],void visit(char item))//深度优先遍历{int neighborpoint;visit(getvalue(startpoint));//访问结点startpointvisited[startpoint]=1;//标记结点startpoint已经被访问neighborpoint=getfirstneighbor(startpoint);//求结点startpoint的第一个邻接结点while(neighborpoint!=-1)//当邻接结点存在时循环{if(!visited[neighborpoint])depthfirstsearch(neighborpoint,visited,visit);//对结点startpoint递归neighborpoint=getnextneighbor(startpoint,neighborpoint);//结点neighborpoint为<startpoint,neighborpoint>邻接边的下一个邻接结点}}void graph::breadthfirstsearch(const int startpoint,int visited[],void visit(char item))//广度优先遍历{char getqueuehead,neighborpoint;SeqQueue queue;visit(getvalue(startpoint));//访问初始结点startpointvisited[startpoint]=1;//标记startpoint已经访问queue.enqueue(startpoint);//结点startpoint入队while(!queue.isempty())//步骤1:当队列非空时继续执行{getqueuehead=queue.dequeue();//出队取队头结点getqueueheadneighborpoint=getfirstneighbor(getqueuehead);//查队头结点的第一个邻接结点neighborpointwhile(neighborpoint!=-1)//步骤2:若结点neighborpoint存在则继续执行否则返回步骤1{if(!visited[neighborpoint])//若结点neighborpoint尚未被访问{visit(getvalue(neighborpoint));//访问结点neighborpointvisited[neighborpoint]=1;//标记neighborpoint已经访问queue.enqueue(neighborpoint);//结点neighborpoint入队}neighborpoint=getnextneighbor(getqueuehead,neighborpoint);//查结点startpoint,neighborpoint的下一个邻接结点为neighborpoint 返回步骤2}}}。
以下是一个简单的Python综合实践项目实现方法和步骤,包括设计和代码。
项目名称:学生信息管理系统一、项目目标本系统旨在实现对学生信息的管理,包括添加、查询、修改和删除学生信息等功能。
二、项目设计1. 数据结构:使用字典来存储学生信息,字典的键为学生编号,值为包含学生姓名、年龄和专业等信息的元组。
2. 功能模块:系统分为四个功能模块,分别为添加学生信息、查询学生信息、修改学生信息和删除学生信息。
3. 输入输出:用户通过控制台输入命令和参数,系统根据命令调用相应模块处理数据并输出结果。
三、代码实现1. 添加学生信息模块python复制代码def add_student():student_id = input("请输入学生编号:")name = input("请输入学生姓名:")age = input("请输入学生年龄:")major = input("请输入学生专业:")students[student_id] = (name, age, major)print("添加成功!")2. 查询学生信息模块python复制代码def query_student():student_id = input("请输入要查询的学生编号:")if student_id in students:print("学生信息如下:")print("编号:", student_id)print("姓名:", students[student_id][0])print("年龄:", students[student_id][1])print("专业:", students[student_id][2])else:print("未找到该学生信息!")3. 修改学生信息模块python复制代码def modify_student():student_id = input("请输入要修改的学生编号:")if student_id in students:name = input("请输入新的学生姓名:")age = input("请输入新的学生年龄:")major = input("请输入新的学生专业:")students[student_id] = (name, age, major)print("修改成功!")else:print("未找到该学生信息!")4. 删除学生信息模块python复制代码def delete_student():student_id = input("请输入要删除的学生编号:")if student_id in students:del students[student_id]print("删除成功!")else:print("未找到该学生信息!")。
目录实验一线性表基本操作的编程实现 (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个位置。
实验六图基本操作的编程实现【实验目的】图基本操作的编程实现要求:图基本操作的编程实现(2学时,验证型),掌握图的建立、遍历、插入、删除等基本操作的编程实现,存储结构可以在顺序结构、链接结构、联合使用多种结构等中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】编程对图进行存储(邻接矩阵或邻接表都可以,由学生自由选择),之后可以询问任何两个结点之间是否有通路和路径数。
设计一个将图形转成邻接链表的程序。
设计一个深度优先搜索法来查找图形的程序。
设计一个广度优先搜索法来查找一个图形的程序。
鼓励开发出难度更高的程序。
【思考问题】1.图的定义和特性?2.图的主要存储结构是什么?是独立的某种还是多种数据结构的综合?3.图的主要遍历思路是哪些?4.举出图的应用范例?【参考代码】(一)基础篇//将一个图采用邻接表存储,并在该存储方法上进行深度优先遍历.//程序构思://用户键盘输入结点与各条边,再将边转成邻接链表。
//然后对采用邻接表表示的图进行深度优先遍历。
#include<stdio.h>#include <stdlib.h>#define vertexnum 100 //定义最大可输入的结点个数typedef struct node //定义图形的顶点结构{int vertex; //图中的顶点信息为数字struct node *next;}Graph;Graph head[vertexnum]; //邻接表的表头结点int Visited[vertexnum]; //遍历记录void Create_l_Graph(int Vertex1,int Vertex2,int no){ //以邻接链表建立图形Graph *searchP; //结点声明Graph *New; //新结点声明New=(Graph *)malloc(sizeof(struct node));if (New!= NULL ){New->vertex=Vertex2;New->next=NULL;searchP=&(head[Vertex1]);while(searchP->next!=NULL)searchP=searchP->next;searchP->next =New;if(no==0){New=(Graph *)malloc(sizeof(struct node));New->vertex=Vertex1;New->next=NULL;searchP=&(head[Vertex2]);while(searchP->next!=NULL)searchP=searchP->next;searchP->next =New;}}}void showmenu(){ //显示菜单printf(" 欢迎使用图的操作演示软件\n");printf("\t1、创建图的邻接表\n");printf("\t2、图的输出\n");printf("\t3、图的深度优先遍历\n");printf("\t4、退出程序\n");}void print_l_graph(Graph *head){ //输出邻接链表的数据Graph *searchP;searchP=head->next;while(searchP!=NULL){}printf("\n");}void DFS(int vertex){ //深度优先遍历Graph *SearchP; //结点声明//标记某个结点已遍历过printf("[%d]==>",vertex);SearchP=head[vertex].next;while(SearchP!=NULL){if( ) //判断结点未被遍历过//递归调用深度优先遍历函数 SearchP=SearchP->next; //下一个邻接点}}void main(){int source; //图中一条边的起始顶点int destination; //图中一条边的终止顶点int i,j;int vermax; //定义图中最大的顶点数int edgemax; //定义图中最大的边数int choice;int no;while(1){showmenu();printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);//清除键盘缓冲区switch(choice){case 1:printf("请输入图的类别(有向图-1,无向图-0):");scanf("%d",&no);printf("请输入图中的总顶点数和边数:");scanf("%d%d",&vermax,&edgemax);for(i=1;i<vermax;i++){head[i].vertex = i;head[i].next = NULL;}for(i=1;i<=edgemax;i++){printf("请输入第%d条边的起点:",i);scanf("%d",&source);printf("请输入第%d条边的终点:",i);scanf("%d",&destination);if(source==destination)printf("输入有误!\n");//出错:自身循环else //调用建立邻接链表 Create_l_Graph(source,destination,no);}printf("图创建成功,按任意键继续…\n");getch();system("cls");break;case 2:printf("图的邻接表如下:\n");for(i=1;i<=vermax;i++){printf("顶点[%d]:",i);print_l_graph(&head[i]);//调用输出邻接链表数据}printf("\n");system("pause");system("cls");break;case 3:for(i=1;i<=vermax;i++)Visited[i]=0;printf("请输入遍历的起点:");scanf("%d",&source);printf("图的深度优先遍历结果为:\n");DFS(source);printf("END\n");system("pause");system("cls");break;case 4:return;default:printf("你的输入有误,请从新输入!\n");system("pause");system("cls");}}}(二)提高篇//将一个图采用邻接表存储,并在该存储方法上进行深度优先遍历..//程序构思://用户键盘输入结点与各个边,再将边转成邻接链表。
//然后对采用邻接表表示的图进行广度优先遍历。
#include<stdio.h>#include <stdlib.h>#define vertexnum 100 //定义最大可输入的结点个数#define QueueMax 100typedef struct node //定义图形的顶点结构{int vertex; //图中的顶点信息为数字 struct node *next;}Graph;Graph head[vertexnum]; //邻接表的表头结点int Visited[vertexnum]; //遍历记录int Front=-1;int Rear=-1;int Queue[QueueMax];int Enqueue(int Vertex) //元素入队{if (Rear>=QueueMax) //队列已满return -1;else{Rear++; //队列尾端指针后移 Queue[Rear]=Vertex; //将值存入队列中return 1;}}int Dequeue() //元素出队{if (Front>=Rear) //队列已空return -1;else{Front++; //队头指针后移return Queue[Front];}}void BFS(int Vertex)//广度优先搜索{}void Create_l_Graph(int Vertex1,int Vertex2,int no) { //以邻接链表建立图形Graph *searchP; //结点声明Graph *New; //新结点声明New=(Graph *)malloc(sizeof(struct node));if (New!= NULL ){New->vertex=Vertex2;New->next=NULL;searchP=&(head[Vertex1]);while(searchP->next!=NULL)searchP=searchP->next;searchP->next =New;if(no==0){New=(Graph *)malloc(sizeof(struct node));New->vertex=Vertex1;New->next=NULL;searchP=&(head[Vertex2]);while(searchP->next!=NULL)searchP=searchP->next;searchP->next =New;}}}void showmenu(){ //显示菜单printf(" 欢迎使用图的操作演示软件\n");printf("\t1、创建图的邻接表\n");printf("\t2、图的输出\n");printf("\t3、图的广度优先遍历\n");printf("\t4、退出程序\n");}void print_l_graph(Graph *head){ //输出邻接链表的数据Graph *searchP;searchP=head->next;while(searchP!=NULL){printf("[%d]",searchP->vertex);searchP=searchP->next;}printf("\n");}void main(){int source; //图中一条边的起始顶点int destination; //图中一条边的终止顶点int i,j;int vermax; //定义图中最大的顶点数int edgemax; //定义图中最大的边数int choice;int no;while(1){showmenu();printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);//清除键盘缓冲区switch(choice){case 1:printf("请输入图的类别(有向图-1,无向图-0):");scanf("%d",&no);printf("请输入图中的总顶点数和边数:");scanf("%d%d",&vermax,&edgemax);for(i=1;i<vermax;i++){head[i].vertex = i;head[i].next = NULL;}for(i=1;i<=edgemax;i++){printf("请输入第%d条边的起点:",i);scanf("%d",&source);printf("请输入第%d条边的终点:",i);scanf("%d",&destination);if(source==destination)printf("输入有误!\n");//出错:自身循环else //调用建立邻接链表Create_l_Graph(source,destination,no);}printf("图创建成功,按任意键继续…\n");getch();system("cls");break;case 2:printf("图的邻接表如下:\n");for(i=1;i<=vermax;i++){printf("顶点[%d]:",i);print_l_graph(&head[i]);//调用输出邻接链表数据}printf("\n");system("pause");system("cls");break;case 3:for(i=1;i<=vermax;i++)Visited[i]=0;printf("请输入遍历的起点:");scanf("%d",&source);printf("图的广度优先遍历结果为:\n");BFS(source);printf("END\n");system("pause");system("cls");break;case 4:return;default:printf("你的输入有误,请从新输入!\n");system("pause");system("cls");}}}(三)挑战篇1、最短路径问题,利用迪杰思特拉算法求解一个带权图中某一结点到其它各个结点的最短路径。