软件技术基础实验教学大纲.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《软件技术基础实验教学大纲.docx》由会员分享,可在线阅读,更多相关《软件技术基础实验教学大纲.docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件技术基础实验教学大纲目录一、课程简介2二、课程实验教学的目的、任务与要求2三、实验方式与基本要求2四、实验项目设置2五、教材(讲义、指导书)3六、实验报告要求3七、考试(考核)方式3八、使用说明3软件技术基础课程实验项目14软件技术基础课程实验项目28软件技术基础课程实验项目313软件技术基础课程实验项目421/=采用后序遍历求二叉树的深度、结点数及叶子数的递归算法= int TrecDcpth(BinTree T)(int hl, hr, max;if(T)(hl=TreeDepth(T-lchi Id);求左深度hr=TreeDepth(T-rchild);求右深度max=hlhr?
2、hl :hr;取左右深度的最大值NodeNum=NodeNum+1;求结点数if(hl=O&hr=O) leaf=leaf+l; 若左右深度为 0,即为叶子。 return (max+1);)else return(0);)=利用先进先出(FIFO)队列,按层次遍历二叉树=void Leve1 order (Bi nTree T)(int front=0, rear=l;BinTNodc *cqMax, *p;定义结点的指针数组cqcq 1 =T;根入队while(front!=rear)(front=(front+l)%NodeNum;p=cqfront;出队printf (c, p-dat
3、a);出队,输出结点的值if(p-lchild!=NULL)rear二(rear+l)%NodeNum;cq rear=p-lchi Id;左子树入队)if(p-rchild!=NULL)rear=(rear+1)%NodeNum;cq rear =p-rch i 1 d;右子树入队)/=主 函 = void main()IBinTrce root;int i,depth;printf(n);printf (z,Creat Bin_Tree; Input preorderO ; 输入完全二叉树的先序序列,/用#代表虚结点,如root=CreatBinTree();创建二叉树,返回根结点do 从
4、菜单中选择遍历方式,输入序号。printf (z,t* select *n);printf (Ati: Preorder Traversaln);printf (z/t2: lorder Traversaln,?);printf(t3: Postorder traversalXn);printf (l4: PostTreeDepth, Node number, Leaf numbern,z);printfCt5: Level Depthn); 按层次遍历之前,先选择4,求出该树的结点数。 printf (,?t0: Exitn);printf(t*n);scant&i); 输入菜单序号(0-5
5、)switch (i)printf (Print Bin tree Preorder:);Preorder (root);先序遍历break;case 1: printf (Print Bin Tree Inorder:);Inorder (root);/中序遍历break;printf (Print Bin_Tree Postorder:);Postordcr (root);后序遍历break;case 2: depth=TreeDepth(root);求树的深度及叶子数printf CBinTrce Dcpth=%d BinTree Node number=%d,, depth, Node
6、Num);printf (,z BinTree Leaf number=%dw, leaf); break;printf(TevePrint Bin_Tree:);Levelorder (root);按层次遍历break;default: exit(1);)printf(n);)while(i!=0);)七、实验要求1、分析、理解程序。2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针),如 ABD#CE#F#,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求所有叶子 及结点总数。八、场地、设备与器材计算机实验室,VC+6. 0软件技术基础课程实验项目3一、实
7、验项目名称及实验项目编号图的遍历操作,05612503二、课程名称及课程编号软件技术基础,056125三、实验目的掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构:掌握DFS及BFS对 图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用四、实验原理DFS和BFS的基本思想深度优先搜索法DFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后选择一个 与Vo相邻且没被访问过的顶点Vi访问,再从Vi出发选择一个与Vi相邻且没被访问过的顶点Vj 访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则回退到已被访问 的顶点序列中最后个拥有未被访问的相邻顶点的顶点
8、W,从W出发按同样方法向前遍历。直到 图中所有的顶点都被访问。广度优先算法BFS的基本思想:从图G中某个顶点V。出发,首先访问V。,然后访问与Vo 相邻的所有未被访问过的顶点VI, V2,,Vt;再依次访问与VI, V2,,Vt相邻的起且 未被访问过的的所有顶点。如此继续,直到访问完图中的所有顶点。五、实验内容1、分析、理解程序。2、调试程序。设计一个有向图和一个无向图,任选一种存储结构,完成有向图和无向图的DFS (深度优先遍历)和BFS (广度优先遍历)的操作。六、实验方法与步骤1 .邻接矩阵作为存储结构的程序示例#includestdio. httincludestdlib. hSdof
9、inc MaxVertcxNum 100定义最大顶点数typedef structchar vexsMaxVertexNum;顶点表int edgesMaxVertexNum MaxVertexNum; 邻接矩阵,可看作边表int n,e;图中的顶点数n和边数e MGraph;用邻接矩阵表示的图的类型=建立邻接矩阵=void GreatMGreiph (MGraph *G)int i, j, k; char a; printf(Input VertexNum(n) and EdgesNum(e):); scanf (飞d,%d”,&G-n,&G-e);输入顶点数和边数scanf&a); pri
10、ntf (Input Vertex string/); for(i=0;in;i+) ( scanf (?,%c,z, &a); G-vexsi=a;读入顶点信息,建立顶点表 for (i=0;in;i+) for(j=0;jn;j+) G-cdgcsi j=0;初始化邻接矩阵printf(,/1 nput edges, Creat Adjacency Matrix%); for(k=0;ke;k+) /读入e条边,建立邻接矩阵scanf(d%d,&i,&j);/输入边(Vi, Vj)的顶点序号G-edgesij=l;G-edgesji=l; 若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条
11、语句 ) =定义标志向量,为全局变量=二= typedef enumFALSE, TRUE Boolean; Boolean visi tedMaxVertexNuml;=DFS :深度优先遍历的递归算法= void DFSM(MGraph *G, int i) 以Vi为出发点对邻接矩阵表示的图G进行DFS搜索,邻接矩阵是0, 1矩阵 int j; printf (c, G-vexsi);访问顶点 Vivisited i=TRUE;置己访问标志for(j=0;jn;j+)依次搜索Vi的邻接点if(G-edgesij=l & ! visitedj)DFSM(G, j):void DFS(MGra
12、ph *G)(int i;for(i=0;in;i+) visitedi=FAl.SE;for(i=0;in;i+) if(!visitedi)DFSM(G, i);/ (Vi, Vj) GE,且Vj未访问过,故Vj为新出发点/标志向量初始化/Vi未访问过以Vi为源点开始DFS搜索/=BFS:广度优先遍历= void BFS(MGraph *G,int k)/以Vk为源点对用邻接矩阵表示的图G进行广度优先搜索定义队列标志向量初始化/队列初始化访问源点Vkint i,j, f=0, r=0;int cqMaxVertcxNum;for(i=0;in:i+)visitedi=FALSE;for(i
13、=0;in;i+)cqi=l;printf(%c, G-vexsk); visitedk=TRUE;cqr=k;/Vk已访问,将其入队。注意,实际上是将其序号入队while(cqf !=-1) 队非空则执行i=cqf; f=f+l;Vf 出队for(j=0;jn;j+)依次 Vi 的邻接点 Vjif (G-edgesi j=l & !visitedj) Vj 未访问printf G-vexsj);访问 Vjvisitedj=TRUE;r=r+l; cqr=j;访问过 Vj 入队)/=ma i n=:void main()int i;MGraph *G;G= (MGraph *)malloc(s
14、izeof (MGraph); 为图 G 申请内存空间CrcatMGraph(G);CrcatMGraph(G);建立邻接矩阵prinlf(Print Graphprinlf(Print GraphDFS: );DFS(G);深度优先遍历printf(*Print GraphBFS(G,3);BFS(G,3);以序号为3的顶点开始广度优先遍历printf(,znw);执行顺序:InputVertexNum(n) and EdgesNum(e): 8, 9InputVertex string: 01234567Inputedges, Great Adjacency MatrixvoPrintGr
15、aph DFS: 01374256PrintGraph BFS: 317042562 .邻接链表作为存储结构程序示例Sincludcstdio. h #includesldlib. h#define MaxVertexNum 50定义最大顶点数typedef stiuct node 边表结点int adjvex;邻接点域struct node *next;链域(EdgeNode;typcdef struct vnode 顶点表结点char vertex;顶点域EdgeNode *firstedge;边表头指针VcrtcxNode;typedef VertexNode Adjl.islMaxVe
16、rtexNum;AdjLisl 是邻接表类型typedef struct (AdjList adj list;邻接表int n, e;图中当前顶点数和边数ALGraph;图类型=建立图的邻接表=void CreatALGraph(ALGraph *G) (int i, j, k;char a;EdgeNode *s;定义边表结点printf(Input VertexNum(n) and EdgesNum(e):);scanf (%d,&G-e);读入顶点数和边数scanf&a);printf(Input Vertex string:);for (i=0; in; i+)建立边表(scanf(“
17、/c, &a);G-adjlist i. ver tex =a;读入顶点信息G-adjlisti, firstedge=NULL; 边表置为空表 ) printf (Input edges, Creat Adjacency Listn);for (k=0; ke; k+) 建立边表scanf(线读入边(Vi, Vj)的顶点对序号s= (EdgeNode *)malloc(sizeof (EdgeNode);生成边表结点s-adjvex=j;邻接点序号为js-next=G-adjlisti. firstedgc;G-adj 1 ist i . f i rstedge=s;将新结点*S插入顶点Vi
18、的边表头部s=(EdgeNode *)malloc(sizeof(EdgeNode);s-adjvex=i;邻接点序号为is-next=G-adjlistjL firstedgo;G-adjlist j. firstedge=s;将新结点*S插入顶点Vj的边表头部)=定义标志向量,为全局变量=:typedef enumFALSE, TRUE Boolean;Boolean visi tedMaxVertexNum;/=DFS:深度优先遍历的递归算法= void DFSM(ALGraph *G, int i)以Vi为出发点对邻接链表表示的图G进行DFS搜索EdgeNode *p;prinlf (
19、为G-adjlisti. vertex);访问顶点 Vivisitedi=TRUE;标记 Vi 已访问p=G-adjlist i. first edge;取 Vi 边表的头指针whi le(p) 依次搜索Vi的邻接点Vj,这里j=p-adjvexif(! visitedp-adjvex)DFSM(G, p-adjvex);p=p-next;)void DFS(ALGraph *G) int i;for(i=0;in;i+)visitedi=FALSE;for(i=0;in;i+) if(!visitedti)DFSM(G, i);若Vj尚未被访问/则以Vj为出发点向纵深搜索找Vi的下一个邻接点
20、标志向量初始化/Vi未访问过以Vi为源点开始DFS搜索/=BFS:广度优先遍历= void BFS(ALGraph *G, int k)以Vk为源点对用邻接链表表示的图G进行广度优先搜索int i, f=0, r=0;EdgeNode *p;int cqMaxVertcxNum;int cqMaxVertcxNum;定义FIFO队列for(i=0;in;i+)visitedi=FALSE;标志向量初始化for(i=0;in;i+)初始化标志向量printf G-adjlistk. vertex); 访问源点 Vkvisitedk=TRUE;cqr=k;Vk已访问,将其入队。注意,实际上是将其序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件技术 基础 实验教学 大纲
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内