数据结构C语言版 实验报告 2.docx
《数据结构C语言版 实验报告 2.docx》由会员分享,可在线阅读,更多相关《数据结构C语言版 实验报告 2.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构C语言版实验报告2
数据结构(C语言版)实验报告
专业:
计算机科学与技术
学号:
_______________________
班级:
姓名:
指导教师:
___________________
青岛大学信息工程学院
2014年10月
实验1
实验题目:
顺序存储结构线性表的插入和删除
实验目的:
了解和掌握线性表的逻辑结构和顺序存储结构,掌握线性表的基本算法及相关的时间性能分析。
实验要求:
建立一个数据域定义为整数类型的线性表,在表中允许有重复的数据;根据输入的数据,先找到相应的存储单元,后删除之。
实验主要步骤:
1、分析、理解给出的示例程序。
2、调试程序,并设计输入一组数据(3,-5,6,8,2,-5,4,7,-9),测试程序的如下功能:
根据输入的数据,找到相应的存储单元并删除,显示表中所有的数据。
程序代码:
#include
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineLIST_INIT_SIZE100
typedefintstatus;
typedefintElemType;
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}sqlist;
statusinitlist_sq(sqlist&L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;
}//initList.sq
statusgetelem_sq(sqlist&L)
inti=0,e,d;
printf("pleaseinputhowmanynumberyouwanttoinit\n");
scanf("%d",&d);
printf("pleaseinputthenumberyouwanttoinit\n");
while
(1)
scanf("%d",&e);
L.elem[i]=e;
L.length++;
i++;
if(i>=d)break;
}
statuslistdelet_sq(sqlist&L)
inti=0,e;
int*p;
int*q;
printf("pleaseinputthenumberyouwanttodelete\n");
for(i=0;i{if(L.elem[i]==e){p=&L.elem[i];q=L.elem+L.length-1;for(++p;p<=q;++p)*(p-1)=*p;--L.length;break;}}returnOK;}main(){inti=0;sqlistL;initlist_sq(L);getelem_sq(L);listdelet_sq(L);while(i{printf("%4d",L.elem[i]);i++;}}实验结果:心得体会:经过这次了解和掌握了线性表的逻辑结构和顺序存储结构,明白了线性表的基本算法。实验2实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。实验要求:建立一个数据域定义为字符类型的单链表,在链表中不允许有重复的字符;根据输入的字符,先找到相应的结点,后删除之。实验主要步骤:3、分析、理解给出的示例程序。4、调试程序,并设计输入数据(如:A,C,E,F,H,J,Q,M),测试程序的如下功能:不允许重复字符的插入;根据输入的字符,找到相应的结点并删除。5、修改程序:(1)增加插入结点的功能。(2)建立链表的方法有“前插”、“后插”法。程序代码:实验结果:心得体会:实验3实验题目:栈操作设计和实现实验目的:1、掌握栈的顺序存储结构和链式存储结构,以便在实际中灵活应用。2、掌握栈的特点,即后进先出和先进先出的原则。3、掌握栈的基本运算,如:入栈与出栈等运算在顺序存储结构和链式存储结构上的实现。实验要求:回文判断:对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。实验主要步骤(1)数据从键盘读入;(2)输出要判断的字符串;(3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。程序代码:实验结果:心得体会:实验4实验题目:二叉树操作设计和实现实验目的:掌握二叉树的定义、性质及存储方式,各种遍历算法。实验要求:采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作。实验主要步骤:1、分析、理解程序。2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求所有叶子及结点总数。程序代码:实验结果:心得体会:实验5实验题目:图的遍历操作实验目的:掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。实验要求:采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作。实验主要步骤:设计一个有向图和一个无向图,任选一种存储结构,完成有向图和无向图的DFS(深度优先遍历)和BFS(广度优先遍历)的操作。1.邻接矩阵作为存储结构#include"stdio.h"#include"stdlib.h"#defineMaxVertexNum100//定义最大顶点数typedefstruct{charvexs[MaxVertexNum];//顶点表intedges[MaxVertexNum][MaxVertexNum];//邻接矩阵,可看作边表intn,e;//图中的顶点数n和边数e}MGraph;//用邻接矩阵表示的图的类型//=========建立邻接矩阵=======voidCreatMGraph(MGraph*G){inti,j,k;chara;printf("InputVertexNum(n)andEdgesNum(e):");scanf("%d,%d",&G->n,&G->e);//输入顶点数和边数scanf("%c",&a);printf("InputVertexstring:");for(i=0;in;i++){scanf("%c",&a);G->vexs[i]=a;//读入顶点信息,建立顶点表}for(i=0;in;i++)for(j=0;jn;j++)G->edges[i][j]=0;//初始化邻接矩阵printf("Inputedges,CreatAdjacencyMatrix\n");for(k=0;ke;k++){//读入e条边,建立邻接矩阵scanf("%d%d",&i,&j);//输入边(Vi,Vj)的顶点序号G->edges[i][j]=1;G->edges[j][i]=1;//若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条语句}}//=========定义标志向量,为全局变量=======typedefenum{FALSE,TRUE}Boolean;Booleanvisited[MaxVertexNum];//========DFS:深度优先遍历的递归算法======voidDFSM(MGraph*G,inti){//以Vi为出发点对邻接矩阵表示的图G进行DFS搜索,邻接矩阵是0,1矩阵给出你的编码 //===========BFS:广度优先遍历=======voidBFS(MGraph*G,intk){//以Vk为源点对用邻接矩阵表示的图G进行广度优先搜索给出你的编码//==========主程序main=====voidmain(){inti;MGraph*G;G=(MGraph*)malloc(sizeof(MGraph));//为图G申请内存空间CreatMGraph(G);//建立邻接矩阵printf("PrintGraphDFS:");DFS(G);//深度优先遍历printf("\n");printf("PrintGraphBFS:");BFS(G,3);//以序号为3的顶点开始广度优先遍历printf("\n");}2.邻接链表作为存储结构#include"stdio.h"#include"stdlib.h"#defineMaxVertexNum50//定义最大顶点数typedefstructnode{//边表结点intadjvex;//邻接点域structnode*next;//链域}EdgeNode;typedefstructvnode{//顶点表结点charvertex;//顶点域EdgeNode*firstedge;//边表头指针}VertexNode;typedefVertexNodeAdjList[MaxVertexNum];//AdjList是邻接表类型typedefstruct{AdjListadjlist;//邻接表intn,e;//图中当前顶点数和边数}ALGraph;//图类型//=========建立图的邻接表=======voidCreatALGraph(ALGraph*G){inti,j,k;chara;EdgeNode*s;//定义边表结点printf("InputVertexNum(n)andEdgesNum(e):");scanf("%d,%d",&G->n,&G->e);//读入顶点数和边数scanf("%c",&a);printf("InputVertexstring:");for(i=0;in;i++)//建立边表{scanf("%c",&a);G->adjlist[i].vertex=a;//读入顶点信息G->adjlist[i].firstedge=NULL;//边表置为空表}printf("Inputedges,CreatAdjacencyList\n");for(k=0;ke;k++){//建立边表scanf("%d%d",&i,&j);//读入边(Vi,Vj)的顶点对序号s=(EdgeNode*)malloc(sizeof(EdgeNode));//生成边表结点s->adjvex=j;//邻接点序号为js->next=G->adjlist[i].firstedge;G->adjlist[i].firstedge=s;//将新结点*S插入顶点Vi的边表头部s=(EdgeNode*)malloc(sizeof(EdgeNode));s->adjvex=i;//邻接点序号为is->next=G->adjlist[j].firstedge;G->adjlist[j].firstedge=s;//将新结点*S插入顶点Vj的边表头部}}//=========定义标志向量,为全局变量=======typedefenum{FALSE,TRUE}Boolean;Booleanvisited[MaxVertexNum];//========DFS:深度优先遍历的递归算法======voidDFSM(ALGraph*G,inti){//以Vi为出发点对邻接链表表示的图G进行DFS搜索给出你的编码//==========BFS:广度优先遍历=========voidBFS(ALGraph*G,intk){//以Vk为源点对用邻接链表表示的图G进行广度优先搜索给出你的编码//==========主函数===========voidmain(){inti;ALGraph*G;G=(ALGraph*)malloc(sizeof(ALGraph));CreatALGraph(G);printf("PrintGraphDFS:");DFS(G);printf("\n");printf("PrintGraphBFS:");BFS(G,3);printf("\n");}实验结果:1.邻接矩阵作为存储结构2.邻接链表作为存储结构 心得体会:实验6实验题目:二分查找算法的实现实验目的:掌握二分查找法的工作原理及应用过程,利用其工作原理完成实验题目中的内容。。实验要求:编写程序构造一个有序表L,从键盘接收一个关键字key,用二分查找法在L中查找key,若找到则提示查找成功并输出key所在的位置,否则提示没有找到信息。。实验主要步骤:1.建立的初始查找表可以是无序的,如测试的数据为{3,7,11,15,17,21,35,42,50}或者{11,21,7,3,15,50,42,35,17}。2.给出算法的递归和非递归代码;3.如何利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性?程序代码实验结果:心得体会:实验7实验题目:排序实验目的:掌握各种排序方法的基本思想、排序过程、算法实现,能进行时间和空间性能的分析,根据实际问题的特点和要求选择合适的排序方法。实验要求:实现直接排序、冒泡、直接选择、快速、堆、归并排序算法。比较各种算法的运行速度。实验主要步骤:程序代码实验结果:心得体会:
if(L.elem[i]==e)
p=&L.elem[i];
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
break;
main()
inti=0;
sqlistL;
initlist_sq(L);
getelem_sq(L);
listdelet_sq(L);
while(i{printf("%4d",L.elem[i]);i++;}}实验结果:心得体会:经过这次了解和掌握了线性表的逻辑结构和顺序存储结构,明白了线性表的基本算法。实验2实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。实验要求:建立一个数据域定义为字符类型的单链表,在链表中不允许有重复的字符;根据输入的字符,先找到相应的结点,后删除之。实验主要步骤:3、分析、理解给出的示例程序。4、调试程序,并设计输入数据(如:A,C,E,F,H,J,Q,M),测试程序的如下功能:不允许重复字符的插入;根据输入的字符,找到相应的结点并删除。5、修改程序:(1)增加插入结点的功能。(2)建立链表的方法有“前插”、“后插”法。程序代码:实验结果:心得体会:实验3实验题目:栈操作设计和实现实验目的:1、掌握栈的顺序存储结构和链式存储结构,以便在实际中灵活应用。2、掌握栈的特点,即后进先出和先进先出的原则。3、掌握栈的基本运算,如:入栈与出栈等运算在顺序存储结构和链式存储结构上的实现。实验要求:回文判断:对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。实验主要步骤(1)数据从键盘读入;(2)输出要判断的字符串;(3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。程序代码:实验结果:心得体会:实验4实验题目:二叉树操作设计和实现实验目的:掌握二叉树的定义、性质及存储方式,各种遍历算法。实验要求:采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作。实验主要步骤:1、分析、理解程序。2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求所有叶子及结点总数。程序代码:实验结果:心得体会:实验5实验题目:图的遍历操作实验目的:掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。实验要求:采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作。实验主要步骤:设计一个有向图和一个无向图,任选一种存储结构,完成有向图和无向图的DFS(深度优先遍历)和BFS(广度优先遍历)的操作。1.邻接矩阵作为存储结构#include"stdio.h"#include"stdlib.h"#defineMaxVertexNum100//定义最大顶点数typedefstruct{charvexs[MaxVertexNum];//顶点表intedges[MaxVertexNum][MaxVertexNum];//邻接矩阵,可看作边表intn,e;//图中的顶点数n和边数e}MGraph;//用邻接矩阵表示的图的类型//=========建立邻接矩阵=======voidCreatMGraph(MGraph*G){inti,j,k;chara;printf("InputVertexNum(n)andEdgesNum(e):");scanf("%d,%d",&G->n,&G->e);//输入顶点数和边数scanf("%c",&a);printf("InputVertexstring:");for(i=0;in;i++){scanf("%c",&a);G->vexs[i]=a;//读入顶点信息,建立顶点表}for(i=0;in;i++)for(j=0;jn;j++)G->edges[i][j]=0;//初始化邻接矩阵printf("Inputedges,CreatAdjacencyMatrix\n");for(k=0;ke;k++){//读入e条边,建立邻接矩阵scanf("%d%d",&i,&j);//输入边(Vi,Vj)的顶点序号G->edges[i][j]=1;G->edges[j][i]=1;//若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条语句}}//=========定义标志向量,为全局变量=======typedefenum{FALSE,TRUE}Boolean;Booleanvisited[MaxVertexNum];//========DFS:深度优先遍历的递归算法======voidDFSM(MGraph*G,inti){//以Vi为出发点对邻接矩阵表示的图G进行DFS搜索,邻接矩阵是0,1矩阵给出你的编码 //===========BFS:广度优先遍历=======voidBFS(MGraph*G,intk){//以Vk为源点对用邻接矩阵表示的图G进行广度优先搜索给出你的编码//==========主程序main=====voidmain(){inti;MGraph*G;G=(MGraph*)malloc(sizeof(MGraph));//为图G申请内存空间CreatMGraph(G);//建立邻接矩阵printf("PrintGraphDFS:");DFS(G);//深度优先遍历printf("\n");printf("PrintGraphBFS:");BFS(G,3);//以序号为3的顶点开始广度优先遍历printf("\n");}2.邻接链表作为存储结构#include"stdio.h"#include"stdlib.h"#defineMaxVertexNum50//定义最大顶点数typedefstructnode{//边表结点intadjvex;//邻接点域structnode*next;//链域}EdgeNode;typedefstructvnode{//顶点表结点charvertex;//顶点域EdgeNode*firstedge;//边表头指针}VertexNode;typedefVertexNodeAdjList[MaxVertexNum];//AdjList是邻接表类型typedefstruct{AdjListadjlist;//邻接表intn,e;//图中当前顶点数和边数}ALGraph;//图类型//=========建立图的邻接表=======voidCreatALGraph(ALGraph*G){inti,j,k;chara;EdgeNode*s;//定义边表结点printf("InputVertexNum(n)andEdgesNum(e):");scanf("%d,%d",&G->n,&G->e);//读入顶点数和边数scanf("%c",&a);printf("InputVertexstring:");for(i=0;in;i++)//建立边表{scanf("%c",&a);G->adjlist[i].vertex=a;//读入顶点信息G->adjlist[i].firstedge=NULL;//边表置为空表}printf("Inputedges,CreatAdjacencyList\n");for(k=0;ke;k++){//建立边表scanf("%d%d",&i,&j);//读入边(Vi,Vj)的顶点对序号s=(EdgeNode*)malloc(sizeof(EdgeNode));//生成边表结点s->adjvex=j;//邻接点序号为js->next=G->adjlist[i].firstedge;G->adjlist[i].firstedge=s;//将新结点*S插入顶点Vi的边表头部s=(EdgeNode*)malloc(sizeof(EdgeNode));s->adjvex=i;//邻接点序号为is->next=G->adjlist[j].firstedge;G->adjlist[j].firstedge=s;//将新结点*S插入顶点Vj的边表头部}}//=========定义标志向量,为全局变量=======typedefenum{FALSE,TRUE}Boolean;Booleanvisited[MaxVertexNum];//========DFS:深度优先遍历的递归算法======voidDFSM(ALGraph*G,inti){//以Vi为出发点对邻接链表表示的图G进行DFS搜索给出你的编码//==========BFS:广度优先遍历=========voidBFS(ALGraph*G,intk){//以Vk为源点对用邻接链表表示的图G进行广度优先搜索给出你的编码//==========主函数===========voidmain(){inti;ALGraph*G;G=(ALGraph*)malloc(sizeof(ALGraph));CreatALGraph(G);printf("PrintGraphDFS:");DFS(G);printf("\n");printf("PrintGraphBFS:");BFS(G,3);printf("\n");}实验结果:1.邻接矩阵作为存储结构2.邻接链表作为存储结构 心得体会:实验6实验题目:二分查找算法的实现实验目的:掌握二分查找法的工作原理及应用过程,利用其工作原理完成实验题目中的内容。。实验要求:编写程序构造一个有序表L,从键盘接收一个关键字key,用二分查找法在L中查找key,若找到则提示查找成功并输出key所在的位置,否则提示没有找到信息。。实验主要步骤:1.建立的初始查找表可以是无序的,如测试的数据为{3,7,11,15,17,21,35,42,50}或者{11,21,7,3,15,50,42,35,17}。2.给出算法的递归和非递归代码;3.如何利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性?程序代码实验结果:心得体会:实验7实验题目:排序实验目的:掌握各种排序方法的基本思想、排序过程、算法实现,能进行时间和空间性能的分析,根据实际问题的特点和要求选择合适的排序方法。实验要求:实现直接排序、冒泡、直接选择、快速、堆、归并排序算法。比较各种算法的运行速度。实验主要步骤:程序代码实验结果:心得体会:
printf("%4d",L.elem[i]);
实验结果:
心得体会:
经过这次了解和掌握了线性表的逻辑结构和顺序存储结构,明白了线性表的基本算法。
实验2
单链表的插入和删除
了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
建立一个数据域定义为字符类型的单链表,在链表中不允许有重复的字符;根据输入的字符,先找到相应的结点,后删除之。
3、分析、理解给出的示例程序。
4、调试程序,并设计输入数据(如:
A,C,E,F,H,J,Q,M),测试程序的如下功能:
不允许重复字符的插入;根据输入的字符,找到相应的结点并删除。
5、修改程序:
(1)增加插入结点的功能。
(2)建立链表的方法有“前插”、“后插”法。
实验3
栈操作设计和实现
1、掌握栈的顺序存储结构和链式存储结构,以便在实际中灵活应用。
2、掌握栈的特点,即后进先出和先进先出的原则。
3、掌握栈的基本运算,如:
入栈与出栈等运算在顺序存储结构和链式存储结构上的实现。
回文判断:
对于一个从键盘输入的字符串,判断其是否为回文。
回文即正反序相同。
如“abba”是回文,而“abab”不是回文。
实验主要步骤
(1)数据从键盘读入;
(2)输出要判断的字符串;
(3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。
实验4
二叉树操作设计和实现
掌握二叉树的定义、性质及存储方式,各种遍历算法。
采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作。
1、分析、理解程序。
2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求所有叶子及结点总数。
实验5
图的遍历操作
掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。
采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作。
设计一个有向图和一个无向图,任选一种存储结构,完成有向图和无向图的DFS(深度优先遍历)和BFS(广度优先遍历)的操作。
1.邻接矩阵作为存储结构
#include"stdio.h"
#include"stdlib.h"
#defineMaxVertexNum100//定义最大顶点数
charvexs[MaxVertexNum];//顶点表
intedges[MaxVertexNum][MaxVertexNum];//邻接矩阵,可看作边表
intn,e;//图中的顶点数n和边数e
}MGraph;//用邻接矩阵表示的图的类型
//=========建立邻接矩阵=======
voidCreatMGraph(MGraph*G)
inti,j,k;
chara;
printf("InputVertexNum(n)andEdgesNum(e):
");
scanf("%d,%d",&G->n,&G->e);//输入顶点数和边数
scanf("%c",&a);
printf("InputVertexstring:
for(i=0;in;i++)
G->vexs[i]=a;//读入顶点信息,建立顶点表
for(j=0;jn;j++)
G->edges[i][j]=0;//初始化邻接矩阵
printf("Inputedges,CreatAdjacencyMatrix\n");
for(k=0;ke;k++){//读入e条边,建立邻接矩阵
scanf("%d%d",&i,&j);//输入边(Vi,Vj)的顶点序号
G->edges[i][j]=1;
G->edges[j][i]=1;//若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条语句
//=========定义标志向量,为全局变量=======
typedefenum{FALSE,TRUE}Boolean;
Booleanvisited[MaxVertexNum];
//========DFS:
深度优先遍历的递归算法======
voidDFSM(MGraph*G,inti)
{//以Vi为出发点对邻接矩阵表示的图G进行DFS搜索,邻接矩阵是0,1矩阵
给出你的编码
//===========BFS:
广度优先遍历=======
voidBFS(MGraph*G,intk)
{//以Vk为源点对用邻接矩阵表示的图G进行广度优先搜索
//==========主程序main=====
voidmain()
inti;
MGraph*G;
G=(MGraph*)malloc(sizeof(MGraph));//为图G申请内存空间
CreatMGraph(G);//建立邻接矩阵
printf("PrintGraphDFS:
DFS(G);//深度优先遍历
printf("\n");
printf("PrintGraphBFS:
BFS(G,3);//以序号为3的顶点开始广度优先遍历
2.邻接链表作为存储结构
#defineMaxVertexNum50//定义最大顶点数
typedefstructnode{//边表结点
intadjvex;//邻接点域
structnode*next;//链域
}EdgeNode;
typedefstructvnode{//顶点表结点
charvertex;//顶点域
EdgeNode*firstedge;//边表头指针
}VertexNode;
typedefVertexNodeAdjList[MaxVertexNum];//AdjList是邻接表类型
AdjListadjlist;//邻接表
intn,e;//图中当前顶点数和边数
}ALGraph;//图类型
//=========建立图的邻接表=======
voidCreatALGraph(ALGraph*G)
EdgeNode*s;//定义边表结点
scanf("%d,%d",&G->n,&G->e);//读入顶点数和边数
for(i=0;in;i++)//建立边表
G->adjlist[i].vertex=a;//读入顶点信息
G->adjlist[i].firstedge=NULL;//边表置为空表
printf("Inputedges,CreatAdjacencyList\n");
for(k=0;ke;k++){//建立边表
scanf("%d%d",&i,&j);//读入边(Vi,Vj)的顶点对序号
s=(EdgeNode*)malloc(sizeof(EdgeNode));//生成边表结点
s->adjvex=j;//邻接点序号为j
s->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=s;//将新结点*S插入顶点Vi的边表头部
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=i;//邻接点序号为i
s->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=s;//将新结点*S插入顶点Vj的边表头部
voidDFSM(ALGraph*G,inti)
{//以Vi为出发点对邻接链表表示的图G进行DFS搜索
//==========BFS:
广度优先遍历=========
voidBFS(ALGraph*G,intk)
{//以Vk为源点对用邻接链表表示的图G进行广度优先搜索
//==========主函数===========
ALGraph*G;
G=(ALGraph*)malloc(sizeof(ALGraph));
CreatALGraph(G);
DFS(G);
BFS(G,3);
1.邻接矩阵作为存储结构
2.邻接链表作为存储结构
实验6
二分查找算法的实现
掌握二分查找法的工作原理及应用过程,利用其工作原理完成实验题目中的内容。
。
编写程序构造一个有序表L,从键盘接收一个关键字key,用二分查找法在L中查找key,若找到则提示查找成功并输出key所在的位置,否则提示没有找到信息。
1.建立的初始查找表可以是无序的,如测试的数据为{3,7,11,15,17,21,35,42,50}或者{11,21,7,3,15,50,42,35,17}。
2.给出算法的递归和非递归代码;
3.如何利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性?
程序代码
实验7
排序
掌握各种排序方法的基本思想、排序过程、算法实现,能进行时间和空间性能的分析,根据实际问题的特点和要求选择合适的排序方法。
实现直接排序、冒泡、直接选择、快速、堆、归并排序算法。
比较各种算法的运行速度。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1