数据结构严蔚敏著实验指导_第1页
数据结构严蔚敏著实验指导_第2页
数据结构严蔚敏著实验指导_第3页
数据结构严蔚敏著实验指导_第4页
数据结构严蔚敏著实验指导_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构实验指导及报告书/学年第一学期姓名:学号:班级:指导教师:数学与统计学院2011预备实验C语言的函数数组指针结构体知识一、实验目的1、复习C语言中函数、数组、指针、结构体与共用体等的概念。2、熟悉利用C语言进行程序设计的一般方法。二、实验预习说明以下C语言中的概念1、函数:2、数组:3、指针:4、结构体5、共用体三、实验内容和要求1、调试程序:输出100以内所有的素数(用函数实现)。#include<>intisprime(intn)/*判断一个数是否为素数*/intm;for(m=2;m*m<=n;m+)if(n%m=0)return0;return1;intmai

2、n()/*输出100以内所有素数*/inti;printf("n");for(i=2;i<100;i+)if(isprime(i)=1)printf("%4d",i);return0;运行结果:2、调试程序:对一维数组中的元素进行逆序排列。#include<>#defineN10intmain()intaN=0,1,2,3,4,5,6,7,8,9,i,temp;printf("ntheoriginalArrayis:n");for(i=0;i<N;i+)printf("%4d",ai);fo

3、r(i=0;i<N/2;i+)/*交换数组元素使之逆序*/temp=ai;ai=aN-i-1;aN-i-1=temp;printf("nthechangedArrayis:n");for(i=0;i<N;i+)printf("%4d",ai);return0;运行结果:3、调试程序:在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该把鞍点元素即为该二维数组的一个鞍点。要求从键盘上输入一个二维数组,当鞍点存在时,找出来。#include<>#defineM3#defineN4intmain()intaMN,i,j,k

4、;printf("n请输入二维数组的数据:n");for(i=0;i<M;i+)for(j=0;j<N;j+)scanf("%d",&aij);for(i=0;i<M;i+)/*输出矩阵*/for(j=0;j<N;j+)printf("%4d",aij);printf("n");for(i=0;i<M;i+)k=0;for(j=1;j<N;j+)/*找出第i行的最大值*/if(aij>aik)k=j;for(j=0;j<M;j+)/*判断第i行的最大值是否为该

5、列的最小值*/if(ajk<aik)break;if(j=M)/*在第i行找到鞍点*/printf("%d,%d,%dn",aik,i,k);return0;运行结果:4、调试程序:利用指针输出二维数组的元素。#include<>intmain()inta34=1,3,5,7,9,11,13,15,17,19,21,23;int*p;for(p=a0;p<a0+12;p+)if(p-a0)%4=0)printf("n");printf("%4d",*p);return0;运行结果:5、四项,学生有姓名、年龄、专

6、业、班级四项,编程输入人员的数据,再以表格输出。#include <>#define N 10 struct studentchar name8;int age;char job;union 年龄、专业、班级四项,编程输入人员的数据,再以表格输出。/*/*/*姓名*/年龄*/职业或专业,用 s 或 t 表示学生或教师*/int class;char office10; /* depa;stuN;int main()int i; int n;printf( “ n 请输入人员数scanf( “ %d” ,&n);for(i=0;i<n;i+)/* 班级 */教研室 */

7、n” );/* 输入 n 个人员的信息 */调试程序:设有一个教师与学生通用的表格,教师的数据有姓名、年龄、职业、教研室printf("n请输入第d人员的信息:(nameagejobclass/office)n",i+1);scanf("%s,%d,%c",,&stui.age,&stui.job);if(stui.job=s)scanf("%d",&stui.;elsescanf("%s",stui.;printf(“namefor(i=0;i<n;i+)if(st

8、ui.job=printf("%selseprintf("%s输入的数据:2agejobclass/office/*输出*/s)%3d%3c%dn",%3d%3c%sn",stui.age,stui.age,stui.job,stui.job,stui.;stui.;Wang19s99061Li36tcomputer运行结果:四、实验小结五、教师评语实验一顺序表与链表一、实验目的1、掌握线性表中元素的前驱、后续的概念。2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。3、对线性表相应算法的时间复杂度进行分析。

9、4、理解顺序表、链表数据结构的特点(优缺点)。二、实验预习说明以下概念1、线性表:2、顺序表:3、链表:三、实验内容和要求1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。#include<>#include<>#defineERROR0#define INIT_SIZE 5 /* #define INCREM 5/*typedef int ElemType; /* typedef struct SqlistElemType *slist; /* int length; /* int listsize; /* Sqlist;#defineOK1初始分配

10、的顺序表长度*/溢出时,顺序表长度的增量*/定义表元素的类型*/存储空间的基地址*/顺序表的当前长度*/当前分配的存储空间*/intInitList_sq(Sqlist*L);/*/intCreateList_sq(Sqlist*L,intn);/*/intListInsert_sq(Sqlist*L,inti,ElemTypee);/*/intPrintList_sq(Sqlist*L);/*输出顺序表的元素*/intListDelete_sq(Sqlist*L,inti);/*删除第i个元素*/intListLocate(Sqlist*L,ElemTypee);/*查找值为e的元素*/in

11、tInitList_sq(Sqlist*L)L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType);if(!L->slist)returnERROR;L->length=0;L->listsize=INIT_SIZE;returnOK;/*InitList*/intCreateList_sq(Sqlist*L,intn)ElemTypee;inti;for(i=0;i<n;i+)printf("inputdata%d",i+1);scanf("%d",&e);if(

12、!ListInsert_sq(L,i+1,e)returnERROR;returnOK;/*CreateList*/*输出顺序表中的元素*/intPrintList_sq(Sqlist*L)inti;for(i=1;i<=L->length;i+)printf("%5d",L->slisti-1);returnOK;/*PrintList*/intListInsert_sq(Sqlist*L,inti,ElemTypee)intk;if(i<1|i>L->length+1)returnERROR;if(L->length>=L

13、->listsize)L->slist=(ElemType*)realloc(L->slist,(INIT_SIZE+INCREM)*sizeof(ElemType);if(!L->slist)returnERROR;L->listsize+=INCREM;for(k=L->length-1;k>=i-1;k-)L->slistk+1=L->slistk;L->slisti-1=e;L->length+;returnOK;/*ListInsert*/*在顺序表中删除第i个元素*/intListDelete_sq(Sqlist*L

14、,inti)/*在顺序表中查找指定值元素,返回其序号*/intListLocate(Sqlist*L,ElemTypee)intmain()Sqlistsl;intn,m,k;printf("pleaseinputn:");/*输入顺序表的元素个数*/scanf("%d",&n);if(n>0)printf("n1-CreateSqlist:n");InitList_sq(&sl);CreateList_sq(&sl,n);printf("n2-PrintSqlist:n");Prin

15、tList_sq(&sl);printf("npleaseinputinsertlocationanddata:(location,data)n");scanf("%d,%d",&m,&k);ListInsert_sq(&sl,m,k);printf("n3-PrintSqlist:n");PrintList_sq(&sl);printf("n");elseprintf("ERROR");return0;运行结果2、为第1题补充删除和查找功能函数,并在主函

16、数中补充代码验证算法的正确性。删除算法代码:运行结果算法分析查找算法代码:运行结果算法分析3、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。#include<>#include<>#define ERROR 0#define OK 1typedef int ElemType; /*typedef struct LNode /*ElemType data;struct LNode *next;LNode,*LinkList;定义表元素的类型*/线性表的单链表存储*/LinkList CreateList(int n); /* void PrintList

17、(LinkList L); /*/输出带头结点单链表的所有元素*/int GetElem(LinkList L,int i,ElemType *e); /*/LinkList CreateList(int n)LNode *p,*q,*head;int i;head=(LinkList)malloc(sizeof(LNode);p=head;for(i=0;i<n;i+)q=(LinkList)malloc(sizeof(LNode);head->next=NULL;scanf("%d",&q->data); q->next=NULL;p-&

18、gt;next=q;p=q;return head;/*CreateList*/*/*/*printf("input data %i:",i+1);输入元素值*/结点指针域置空*/新结点连在表末尾*/1个元素*/指向单链表的第voidPrintList(LinkListL)LNode*p;p=L->next;/*pwhile(p!=NULL)printf("%5d",p->data);p=p->next;/*PrintList*/intGetElem(LinkListL,intElemType*e)LNode*p;intj=1;p=L-

19、>next;while(p&&j<i)p=p->next;j+;if(!p|j>i)returnERROR;*e=p->data;returnOK;/*GetElem*/intmain()intn,i;ElemTypee;LinkListL=NULL;/*定义指向单链表的指针*/printf("pleaseinputn:");/*输入单链表的元素个数*/scanf("%d",&n);if(n>0)printf("n1-CreateLinkList:n");L=CreateLi

20、st(n);printf("n2-PrintLinkList:n");PrintList(L);printf("n3-GetElemfromLinkList:n");printf("inputi=");scanf("%d",&i);if(GetElem(L,i,&e)printf("No%iis%d",i,e);elseprintf("notexists");elseprintf("ERROR");return0;运行结果算法分析4、为第3

21、题补充插入功能函数和删除功能函数。并在主函数中补充代码验证算法的正确性。插入算法代码:运行结果算法分析删除算法代码:运行结果算法分析以下为选做实验:5、循环链表的应用(约瑟夫回环问题)n个数据元素构成一个环,从环中任意位置开始计数,计到m将该元素从表中取出,重复上述过程,直至表中只剩下一个元素。提示:用一个无头结点的循环单链表来实现n个元素的存储。算法代码6、设一带头结点的单链表,设计算法将表中值相同的元素仅保留一个结点。提示:指针p从链表的第一个元素开始,利用指针q从指针p位置开始向后搜索整个链表,删除与之值相同的元素;指针p继续指向下一个元素,开始下一轮的删除,直至p=null为至,既完成

22、了对整个链表元素的删除相同值。算法代码四、实验小结五、教师评语实验二栈和队列一、实验目的1、掌握栈的结构特性及其入栈,出栈操作;2、掌握队列的结构特性及其入队、出队的操作,掌握循环队列的特点及其操作。二、实验预习说明以下概念1、顺序栈:2、链栈:3、循环队列:4、链队三、实验内容和要求1、阅读下面程序,将函数Push和函数Pop补充完整。要求车入元素序列12345e,运行结果如下所示。#include<>#include<># defineERROR0# defineOK1# defineSTACK_INT_SIZE10/*存储空间初始分配量*/# defineSTAC

23、KINCREMENT5/*存储空间分配增量*/typedefintElemType;/*定义元素的类型*/typedefstructElemType*base;ElemType*top;intstacksize;/*当前已分配的存储空间*/SqStack;构造空栈 */入栈 */出栈 */创建栈 */出栈并输出栈中元素*/intInitStack(SqStack*S);/*intpush(SqStack*S,ElemTypee);/*intPop(SqStack*S,ElemType*e);/*intCreateStack(SqStack*S);/*voidPrintStack(SqStack

24、*S);/*intInitStack(SqStack*S)S->base=(ElemType*)malloc(STACK_INT_SIZE*sizeof(ElemType);if(!S->base)returnERROR;S->top=S->base;S->stacksize=STACK_INT_SIZE;returnOK;/*InitStack*/intPush(SqStack*S,ElemTypee)/*Push*/intPop(SqStack*S,ElemType*e)/*Pop*/intCreateStack(SqStack*S)inte;if(InitS

25、tack(S)printf("InitSuccess!n");elseprintf("InitFail!n");returnERROR;printf("inputdata:(Terminatedbyinputingacharacter)n");while(scanf("%d",&e)Push(S,e);returnOK;/*CreateStack*/voidPrintStack(SqStack*S)ElemTypee;while(Pop(S,&e)printf("%3d",e);

26、/*Pop_and_Print*/intmain()SqStackss;printf("n1-createStack'n");CreateStack(&ss);printf("n2-Pop&Print'n");PrintStack(&ss);return0;算法分析:输入元素序列12345,为什么输出序列为54321体现了栈的什么特性2、在第1题的程序中,编写一个十进制转换为二进制的数制转换算法函数(要求利用栈来实现),并验证其正确性。实现代码验证3、阅读并运行程序,并分析程序功能。#include<>

27、#include<>#include<>#defineM20#defineelemtypechartypedefstructelemtypestackM;inttop;stacknode;voidinit(stacknode*st);voidpush(stacknode*st,elemtypex);voidpop(stacknode*st);voidinit(stacknode*st)st->top=0;voidpush(stacknode*st,elemtypex)if(st->top=M)printf("thestackisoverflow!n

28、");elsest->top=st->top+1;st->stackst->top=x;voidpop(stacknode*st)if(st->top>0)st->top-;elseprintf("StackisEmpty!n");intmain()charsM;inti;stacknode*sp;printf("createaemptystack!n");sp=malloc(sizeof(stacknode);init(sp);printf("inputaexpression:n"

29、);gets(s);for(i=0;i<strlen(s);i+)if(si='(')push(sp,si);if(si=')')pop(sp);if(sp->top=0)printf("'('match')'!n");elseprintf("'('notmatch')'!n");return0;输入:2+(c-d)*6-(f-7)*a)/6运行结果:输入:a-(c-d)*6-(s/3-x)/2运行结果:程序的基本功能:以下为选做实验:4、设计算法

30、,将一个表达式转换为后缀表达式,并按照后缀表达式进行计算,得出表达式得结果。实现代码5、假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点(不设队头指针)试编写相应的置空队列、入队列、出队列的算法。实现代码:四、实验小结五、教师评语实验三串的模式匹配一、实验目的1、了解串的基本概念2、掌握串的模式匹配算法的实现二、实验预习说明以下概念1、模式匹配:2、BF算法:3、KM崂法:三、实验内容和要求1、阅读并运行下面程序,根据输入写出运行结果。#include<>#include<>#defineMAXSIZE100typedefstructchardataMAX

31、SIZE;intlength;SqString;intstrCompare(SqString*s1,SqString*s2);/*串的比较*/voidshow_strCompare();voidstrSub(SqString*s,intstart,intsublen,SqString*sub);/*求子串*/voidshow_subString();intstrCompare(SqString*s1,SqString*s2)inti;for(i=0;i<s1->length&&i<s2->length;i+)if(s1->datai!=s2->

32、;datai)returns1->datai-s2->datai;returns1->length-s2->length;voidshow_strCompare()SqStrings1,s2;intk;printf("n*showCompare*n");printf("inputstrings1:");gets;=strlen;printf("inputstrings2:");gets;=strlen;if(k=strCompare(&s1,&s2)=0)printf("s1=s2n&

33、quot;);elseif(k<0)printf("s1<s2n");elseprintf("s1>s2n");printf("n*showover*n");voidstrSub(SqString*s,intstart,intsublen,SqString*sub)inti;if(start<1|start>s->length|sublen>s->length-start+1)sub->length=0;for(i=0;i<sublen;i+)sub->datai=s-

34、>datastart+i-1;sub->length=sublen;voidshow_subString()SqStrings,sub;intstart,sublen,i;printf("n*showsubString*n");printf("inputstrings:");gets;=strlen;printf("inputstart:");scanf("%d",&start);printf("inputsublen:");scanf("%d",&

35、;sublen);strSub(&s,start,sublen,&sub);if=0)printf("ERROR!n");elseprintf("subStringis:");for(i=0;i<sublen;i+)printf("%c",i);printf("n*showover*n");intmain()intn;doprintf("n-String-n");printf("1.strCompare'n");printf("2.su

36、bString'n");printf("0.EXIT'n");printf("ninputchoice:");scanf("%d",&n);getchar();switch(n)case1:show_strCompare();break;case2:show_subString();break;default:n=0;break;while(n);return0;运行程序输入:1studentstudents2ComputerDataStuctures104运行结果:2、实现串的模式匹配算法。补充下面

37、程序,实现串的BF和KM崂法。#include<>#include<>#defineMAXSIZE100typedefstructchardataMAXSIZE;intlength;SqString;intindex_bf(SqString*s,SqString*t,intstart);voidgetNext(SqString*t,intnext);intindex_kmp(SqString*s,SqString*t,intstart,intnext);voidshow_index();intindex_bf(SqString*s,SqString*t,intstart

38、)补充代码voidgetNext(SqString*t,intnext)inti=0,j=-1;next0=-1;while(i<t->length)if(j=-1)|(t->datai=t->dataj)i+;j+;nexti=j;elsej=nextj;intindex_kmp(SqString*s,SqString*t,intstart,intnext)补充代码voidshow_index()SqStrings,t;intk,nextMAXSIZE=0,i;printf("n*showindex*n");printf("inputst

39、rings:");gets;=strlen;printf("inputstringt:");gets;=strlen;printf("inputstartposition:");scanf("%d",&k);printf("BF:ntheresultofBFis%dn",index_bf(&s,&t,k);getNext(&t,next);printf("KMP:n");printf("next:");for(i=0;i<i+)

40、printf("%3d",nexti);printf("n");printf("theresultofKMPis%dn",index_kmp(&s,&t,k,next);printf("n*showover*n");intmain()show_index();return0;输入:abcaabbabcabaacbacbaabcabaa1运行结果:四、实验小结五、教师评语实验四二叉树一、实验目的1、掌握二叉树的基本特性2、掌握二叉树的先序、中序、后序的递归遍历算法3、理解二叉树的先序、中序、后序的非递

41、归遍历算法4、通过求二叉树的深度、叶子结点数和层序遍历等算法,理解二叉树的基本特性二、实验预习说明以下概念1、二叉树:2、递归遍历:3、非递归遍历:4、层序遍历:三、实验内容和要求1、阅读并运行下面程序,根据输入写出运行结果,并画出二叉树的形态。#include<>#include<>#defineMAX20typedefstructBTNode/*chardata;/*structBTNode*lchild;structBTNode*rchild;/*节点结构声明*/节点数据*/指针*/*BiTree;voidcreateBiTree(BiTree*t)/*先序遍历创

42、建二叉树*/chars;BiTreeq;printf("npleaseinputdata:(exitfor#)");s=getche();if(s='#')*t=NULL;return;q=(BiTree)malloc(sizeof(structBTNode);if(q=NULL)printf("Memoryallocfailure!");exit(0);q->data=s;*t=q;createBiTree(&q->lchild);/*createBiTree(&q->rchild);/*递归建立左子树

43、*/递归建立右子树*/voidPreOrder(BiTreep)/*if(p!=NULL)printf("%c",p->data);PreOrder(p->lchild);PreOrder(p->rchild);voidInOrder(BiTreep)/*if(p!=NULL)InOrder(p->lchild);printf("%c",p->data);InOrder(p->rchild);voidPostOrder(BiTreep)/*if(p!=NULL)PostOrder(p->lchild);PostO

44、rder(p->rchild);printf("%c",p->data);先序遍历二叉树*/*/后序遍历二叉树*/先序遍历的非递归算法*/voidPreorder_n(BiTreep)/*BiTreestackMAX,q;inttop=0,i;for(i=0;i<MAX;i+)stacki=NULL;/*初始化栈*/q=p;while(q!=NULL)printf("%c",q->data);if(q->rchild!=NULL)stacktop+=q->rchild;if(q->lchild!=NULL)q=q

45、->lchild;elseif(top>0)q=stack-top;elseq=NULL;voidrelease(BiTreet)/*释放二叉树空间*/if(t!=NULL)release(t->lchild);release(t->rchild);free(t);intmain()BiTreet=NULL;createBiTree(&t);printf("nnPreOrderthetreeis:");PreOrder(t);printf("nnInOrderthetreeis:");InOrder(t);printf(&

46、quot;nnPostOrderthetreeis:");PostOrder(t);printf("nn先序遍历序列(非递归):");Preorder_n(t);release(t);return0;运行程序输入:ABC#DE#G#F#运行结果:2、在上题中补充求二叉树中求结点总数算法(提示:可在某种遍历过程中统计遍历的结点数),并在主函数中补充相应的调用验证正确性。算法代码:3、在上题中补充求二叉树中求叶子结点总数算法(提示:可在某种遍历过程中统计遍历的叶子结点数),并在主函数中补充相应的调用验证正确性。算法代码:4、在上题中补充求二叉树深度算法,并在主函数中补

47、充相应的调用验证正确性。算法代码:选做实验:(代码可另附纸)4、补充二叉树层次遍历算法。(提示:利用队列实现)5、补充二叉树中序、后序非递归算法。四、实验小结五、教师评语实验五图的表示与遍历一、实验目的1、掌握图的邻接矩阵和邻接表表示2、掌握图的深度优先和广度优先搜索方法3、理解图的应用方法二、实验预习说明以下概念1、深度优先搜索遍历:2、广度优先搜索遍历:3、拓扑排序:4、最小生成树:5、最短路径:三、实验内容和要求1 、阅读并运行下面程序,根据输入写出运行结果。#include<># defineN20# defineTRUE1# defineFALSE0intvisitedN

48、;typedefstruct/*队列的定义*/intdataN;intfront,rear;queue;typedefstruct/*图的邻接矩阵*/intvexnum,arcnum;charvexsN;intarcsNN;graph;voidcreateGraph(graph*g);/*建立一个无向图的邻接矩阵*/*/voiddfs(inti,graph*g);/*从第i个顶点出发深度优先搜索void tdfs(graph *g);/*void bfs(int k,graph *g); /* void tbfs(graph *g);/*void init_visit(); /*深度优先搜索整

49、个图*/从第 k 个顶点广度优先搜索*/广度优先搜索整个图*/初始化访问标识数组*/void createGraph(graph *g) /* int i,j;char v;g->vexnum=0;建立一个无向图的邻接矩阵*/g->arcnum=0;i=0;printf(" 输入顶点序列while(v=getchar()!='#') g->vexsi=v; /* i+;g->vexnum=i; /*for(i=0;i<g->vexnum;i+) /* for(j=0;j<g->vexnum;j+) g->arcsi

50、j=0;printf(" 输入边的信息:scanf("%d,%d",&i,&j); /*while(i!=-1) /*g->arcsij=1;g->arcsji=1; scanf("%d,%d",&i,&j);( 以#结束) : n");读入顶点信息*/顶点数目 */邻接矩阵初始化 */n");读入边 i,j*/读入 i,j 为 1 时结束 */void dfs(int i,graph *g) /*从第 i 个顶点出发深度优先搜索*/intj;printf("%c&quo

51、t;,g->vexsi);visitedi=TRUE;for(j=0;j<g->vexnum;j+)if(g->arcsij=1)&&(!visitedj)dfs(j,g);void tdfs(graph *g)/*深度优先搜索整个图 */inti;printf("n从顶点学始深度优先搜索序列:",g->vexs0);for(i=0;i<g->vexnum;i+)if(visitedi!=TRUE)dfs(i,g);voidbfs(intk,graph*g)/*从第k个顶点广度优先搜索*/inti,j;queueql

52、ist,*q;q=&qlist;q->rear=0;q->front=0;printf("%c",g->vexsk);visitedk=TRUE;q->dataq->rear=k;q->rear=(q->rear+1)%N;while(q->rear!=q->front)i=q->dataq->front;q->front=(q->front+1)%N;for(j=0;j<g->vexnum;j+)if(g->arcsij=1)&&(!visitedj)p

53、rintf("%c",g->vexsj);visitedj=TRUE;q->dataq->rear=j;q->rear=(q->rear+1)%N;voidtbfs(graph*g)/*广度优先搜索整个图*/inti;printf("n从顶点学始广度优先搜索序列:",g->vexs0);for(i=0;i<g->vexnum;i+)if(visitedi!=TRUE)bfs(i,g);voidinit_visit()/*初始化访问标识数组*/inti;n");for(i=0;i<N;i+)v

54、isitedi=FALSE;intmain()graphga;inti,j;createGraph(&ga);printf("无向图的邻接矩阵:for(i=0;i<i+)for(j=0;j<j+)printf("%3d",ij);printf("n");init_visit();tdfs(&ga);init_visit();tbfs(&ga);return0;根据右图的结构验证实验,输入:ABCDEFGH#0,10,20,51,31,42,52,63,74,7-1,-1运行结果:2、阅读并运行下面程序,补充拓

55、扑排序算法。#include<>#include<>#defineN20typedefstructedgenode/*图的邻接表:邻接链表结点*/intadjvex;/*顶点序号*/structedgenode*next;/*下一个结点的指针*/edgenode;typedefstructvnode/*图的邻接表:邻接表*/chardata;/*顶点信息*/intind;/*顶点入度*/structedgenode*link;/*指向邻接链表指针*/vnode;voidcreateGraph_list(vnodeadjlist,int*p);/*建立有向图的邻接表*/v

56、oidtopSort(vnodeg,intn);/*拓扑排序*/voidcreateGraph_list(vnodeadjlist,int*p)/*建立有向图的邻接表*/inti,j,n,e;charv;edgenode*s;i=0;n=0;e=0;printf("输入顶点序列(以#结束):n");while(v=getchar()!='#')adjlisti.data=v;/*读入顶点信息*/adjlisti.link=NULL;adjlisti.ind=0;i+;n=i;*p=n;/*建立邻接链表*/printf("n请输入弧的信息(i=-1结束):i,j:n");scanf("%d,%d",&i,&j);while(i!=-1)s=(structedgenode*)malloc(sizeof(edgenode);s->adjvex=j;s->next=adjlisti.link;adjlisti.link=s;adjlistj.ind+;/*顶点j的入度加1*/e+;scanf("%d,%d",&i,&j);printf("邻接表:");for(i=0;i<n;i+)/*输出邻接表*/printf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论