数据结构课程设计报告25691_第1页
数据结构课程设计报告25691_第2页
数据结构课程设计报告25691_第3页
数据结构课程设计报告25691_第4页
数据结构课程设计报告25691_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

...wd......wd......wd...数据结构课程设计报告书学校青岛科技大学学号姓名指导教师刘勇课程设计的名称:学生成绩管理问题描述:学生成绩管理是学校教务管理的重要组成局部,其处理信息量很大,该题目是对学生的成绩管理作一个简单的模拟,其中学生信息包括:学号、姓名与成绩。成绩分为课程1成绩、课程2成绩、课程3成绩和总成绩。要求设计一个简易的成绩管理系统,输入各门功课的成绩后能自动求出总成绩,并通过菜单项选择择操作方式完成以下功能:登记学生成绩;②查询学生成绩;插入学生成绩;④删除学生成绩;按总成绩降序排序。基本要求:该题目涉及到单链表的各种操作,包括单链表的建立、结点的查找、插入、删除等基本运算。首先建立学生成绩单链表,链表中每个结点由4个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。然后将要求完成的四项功能写成四个函数,登记学生成绩对应建立学生单链表的功能,后三个功能分别对应单链表的查询、插入与删除三大基本操作。算法思想:Creat()函数算法思想:从0至n循环输入n个同学的三科成绩,并且计算总成绩。Inquiry()函数算法思想:将学号与已输入的所有学号做比较,一旦一样则输出该学号信息,否则显示没有该学生信息。Insert()函数算法思想:生成一个新节点,然后将其接到原有链表尾部。Delete()函数算法思想:通过ID找到该节点,并删去该节点。Sort(函数算法思想:利用排序算法对每一个节点作比较并更换其在链表中的位置顺序。模块划分

〔1〕LinkListCreat(LinkListT,intn)其功能是创造节点,录入成绩。〔2〕voidInquiry(LinkListT)其功能是查询与ID一致的学生信息并展示出来。〔3〕voidInsert(LinkListT,intn)其功能是添加假设干个学生的成绩信息。〔4〕voidDelete(LinkListT)其功能是删除假设干个学生的成绩信息。〔5〕voidSort(LNode*p)其功能是排序并展示假设干个学生的成绩信息。数据构造:

数据类型LNode定义如下:

typedefstructLNode{intID;charname[20];intscore1;intscore2;intscore3;inttotal;structLNode*next;}LNode,*LinkList;源程序:源代码//main.c#include<stdio.h>#include<stdlib.h>typedefstructLNode{intID;charname[20];intscore1;intscore2;intscore3;inttotal;structLNode*next;}LNode,*LinkList;LinkListCreat(LinkListT,intn);voidDelete(LinkListT);voidInquiry(LinkListT);voidInsert(LinkListT,intn);voidSort(LNode*p);voidInsert(LinkListT,intn){inti;LNode*r=T,*p;while((r->next)!=NULL){r=r->next;}for(i=0;i<n;i++){p=(LNode*)malloc(sizeof(LNode));printf("Pleaseenterthestudent'sstudentID:");scanf("%d",&p->ID);printf("Pleaseenterthestudent'sname:");scanf("%s",p->name);printf("Pleaseenterthestudent'sscore1:");scanf("%d",&p->score1);printf("Pleaseenterthestudent'sscore2:");scanf("%d",&p->score2);printf("Pleaseenterthestudent'sscore3:");scanf("%d",&p->score3);p->total=p->score1+p->score2+p->score3;printf("Thetotalscoreis%d\n",p->total);p->next=NULL;r->next=p;r=p;}printf("\nInsertiscomplete!");}voidInquiry(LinkListT){intid;printf("PleaseenterthestudentIDyouwanttoinquireabout:");scanf("%d",&id);LNode*p=T;p=p->next;while(p!=NULL){if(p->ID==id){printf("\nThestudentscoresinformationhasbeensuccessfullyinquired!\n");printf("ID:%d\nName:%s\nScore1:%d\nScore2:%d\nScore3:%d\n",p->ID,p->name,p->score1,p->score2,p->score3);break;}else{p=p->next;}}if(!p)printf("Sorry!Didnotinquirythestudentscoresinformation!");}voidDelete(LinkListT){intid,flag=1;printf("PleaseenterthestudentIDyouwanttodeleteabout:");scanf("%d",&id);LNode*p=T;//LNode*q;while((p->next)!=NULL){if(p->next->ID==id){//q=p->next;p->next=p->next->next;//deleteq;printf("\nThestudentscoresinformationhasbeensuccessfullydeleted!\n");flag=0;break;}else{p=p->next;}}if(flag)printf("Sorry!Didnotdeletethestudentscoresinformationyouwanttodelete!");}voidSort(LNode*p){LNode*r,*qian,*hou;qian=p->next;hou=qian->next;while(hou)if(qian->total>=hou->total){qian=hou;hou=hou->next;}//ifelse{r=p;while(r->next->total>hou->total)r=r->next;qian->next=hou->next;hou->next=r->next;r->next=hou;hou=qian->next;}//elsep=p->next;inti=1;while(p){printf("Num:%d\nID:%d\nName:%s\nScore1:%d\nScore2:%d\nScore3:%d\ntotal:%d\n\n",i,p->ID,p->name,p->score1,p->score2,p->score3,p->total);p=p->next;i++;}}LinkListCreat(LinkListT,intn){LNode*p,*r;inti;T=(LNode*)malloc(sizeof(LNode));T->next=NULL;r=T;for(i=0;i<n;i++){p=(LNode*)malloc(sizeof(LNode));printf("Pleaseenterthestudent'sstudentID:");scanf("%d",&p->ID);printf("Pleaseenterthestudent'sname:");scanf("%s",p->name);printf("Pleaseenterthestudent'sscore1:");scanf("%d",&p->score1);printf("Pleaseenterthestudent'sscore2:");scanf("%d",&p->score2);printf("Pleaseenterthestudent'sscore3:");scanf("%d",&p->score3);p->total=p->score1+p->score2+p->score3;printf("Thetotalscoreis%d\n",p->total);p->next=NULL;r->next=p;r=p;}returnT;}intmain(){LNode*p;intn;while(1){system("cls");printf("StudentScoresManagement\n\n");printf("1-Enterthestudent'sscore\n");printf("2-Querythestudent'sscore\n");printf("3-Insertthestudent'sscore\n");printf("4-Deletethestudent'sscore\n");printf("5-Sortthestudent'sscore\n");printf("0-Exitsystem\n\n");printf("Pleaseenteranumberselection(0-5):");intchoice;scanf("%d",&choice);system("cls");if(choice==0)exit(0);switch(choice){case1:printf("Pleaseenterthenumberofstudentsyouwanttoenteryourstudent'sscores:");scanf("%d",&n);p=Creat(p,n);printf("\n\nPleaseenteryourchoice(1):");printf("1-Esc");scanf("%d",&n);if(n)break;case2:printf("Pleaseenterthenumberofstudentsyouwanttoqueryyourstudent'sscores:");scanf("%d",&n);inti=0;while(i<n){Inquiry(p);i++;}printf("\nPleaseenteryourchoice(1):");printf("1-Esc");scanf("%d",&n);break;case3:printf("Pleaseenterthenumberofstudentsyouwanttoinsertyourstudent'sscores:");scanf("%d",&n);Insert(p,n);printf("\nPleaseenteryourchoice(1):");printf("1-Esc");scanf("%d",&n);break;case4:printf("Pleaseenterthenumberofstudentsyouwanttodeleteyourstudent'sscores:");scanf("%d",&n);i=0;while(i<n){Delete(p);i++;}printf("\nPleaseenteryourchoice(1):");printf("1-Esc");scanf("%d",&n);break;case5:Sort(p);printf("\nPleaseenteryourchoice(1):");printf("1-Esc");scanf("%d",&n);break;default:break;}}return0;}7.测试情况:截图:

程序输出为:

Num:1ID:1Name:n1Score1:78Score2:89Score3:84total:251Num:2ID:3Name:n3Score1:68Score2:89Score3:90total:247课程设计的名称:停车场的管理问题描述:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列〔大门在最南端,最先到达的第一辆车停放在车场的最北端〕,假设车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进展管理的模拟程序。基本要求:综合利用栈和队列模拟停车场管理,学习利用栈和队列解决实际问题。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进展模拟管理。每一组输入数据包括三个数据项:汽车“到达〞或“离去〞信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进展操作后的输出数据为:假设是车辆到达,则输出汽车在停车场内或便道上的停车位置;假设是车离去;则输出汽车在停车场内停留的时间和应交纳的费用〔在便道上停留的时间不收费〕。栈以顺序构造实现,队列以链表实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储构造实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。算法思想:停车场运用栈的算法思想管理车辆信息;便道运用队列的算法思想管理等待进入停车场的车辆信息;临时停放让路的车辆信息也用队列算法思想管理。模块划分:voidPRINT(CarNode*p,introom其功能为打印出场车的信息voidArrive(SeqStackCar*Enter,LinkQueueCar*W)其功能为记录进场车和等待进场车信息voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)其功能为记录出场车信息voidList1(SeqStackCar*S)其功能为显示存车信息5.数据构造:〔1〕数据类型Time定义如下:typedefstructtime{inthour;intmin;}Time;〔2〕数据类型CarNode定义如下:typedefstructnode{charnum[10];Timereach;Timeleave;}CarNode;〔3〕数据类型SeqStackCar定义如下:typedefstructNODE{CarNode*stack[MAX+1];inttop;}SeqStackCar;〔4〕数据类型QueueNode定义如下:typedefstructcar{CarNode*data;structcar*next;}QueueNode;〔5〕数据类型LinkQueueCar定义如下:typedefstructNode{QueueNode*head;QueueNode*rear;}LinkQueueCar;6.源程序:源代码#include<stdio.h>#include<stdlib.h>#include<windows.h>#defineprice0.15#definemax2//=================================================================================================intflag;//=================================================================================================typedefstructtime{inthour;intmin;}Time;typedefstructnode{longnum;Timereach;Timeleave;}CarNode;//车辆信息结点typedefstructNODE{CarNode*stack[10];inttop;}SeqStackCar;//模拟车场typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstructNode{QueueNode*head;QueueNode*rear;}LinkQueueCar;//模拟通道//=================================================================================================voidInitStack(SeqStackCar*s)//初始化栈{inti;s->top=0;for(i=0;i<=max;i++)s->stack[s->top]=NULL;}voidInitQueue(LinkQueueCar*Q)//初始化便道{Q->head=(QueueNode*)malloc(sizeof(QueueNode));if(Q->head!=NULL){Q->head->next=NULL;Q->rear=Q->head;return(1);}elsereturn(-1);}voidPRINT(CarNode*p,introom)//打印出场车的信息{intA1,A2,B1,B2;printf("\n请输入离开的时间:/**:**/");scanf("%d:%d",&p->leave.hour,&p->leave.min);printf("离开车辆的车牌号为:%ld\n",p->num);printf("其到达时间为:%d:%d\n",p->reach.hour,p->reach.min);printf("离开时间为:%d:%d\n",p->leave.hour,p->leave.min);A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;printf("应交费用为:%2.1fRMB\n",((B1-A1)*60+(B2-A2))*price);free(p);}//=================================================================================================arrivevoidArrive(SeqStackCar*Enter,LinkQueueCar*W){CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode));//flushall();printf("请输入车牌号(例:12345):\n");scanf("%ld",&p->num);if(Enter->top<max)//车辆未满,车进场{Enter->top++;printf("车辆请停在第%d位置.\n",Enter->top);printf("请输入到达时间:\n");scanf("%d:%d",&p->reach.hour,&p->reach.min);Enter->stack[Enter->top]=p;}else//车辆已满{printf("该车须在便道等待!.\n");t=(QueueNode*)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;}printf("Returnmainmeun(1.return0.quit)\n");scanf("%d",&flag);switch(flag){case0:system("cls");printf("Thanks,Welcometousenext\n");exit(0);case1:system("cls");}}//=================================================================================================leavevoidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W){inti,room;CarNode*p,*t;QueueNode*q;if(Enter->top>0)//盼断车场内是否有车{while(1){printf("请输入车在车场的位置/1--%d/:\n",Enter->top);//请输入车在车场的位置scanf("%d",&room);if(room>=1&&room<=Enter->top)break;}while(Enter->top>room)//车辆离开{Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1){Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}PRINT(p,room);//判断通道上是否有车及车场是否已满if((W->head!=W->rear)&&Enter->top<max)//便道的车辆进场{q=W->head->next;t=q->data;Enter->top++;printf("便道的%s号车进入车场第%d位置.\n",t->num,Enter->top);printf("请输入现在的时间/**:**/:\n");scanf("%d:%d",&t->reach.hour,&t->reach.min);W->head->next=q->next;if(q==W->rear)W->rear=W->head;Enter->stack[Enter->top]=t;free(q);}elseprintf("便道;里没有车.\n");}elseprintf("车场里没有车.\n");//车场里没有车printf("Returnmainmeun(1.return0.quit)\n");scanf("%d",&flag);switch(flag){case0:system("cls");printf("Thanks,Welcometousenext\n");exit(0);case1:system("cls");}}//=================================================================================================showvoidList1(SeqStackCar*S)//显示存车信息{inti;if(S->top>0)//判断车场内是否有车{printf("车场\n");for(i=1;i<=S->top;i++){printf("位置%d\到达时间:%d:%d\t号码:%ld\n",i,S->stack[i]->reach.hour,S->stack[i]->reach.min,S->stack[i]->num);}}elseprintf("车场里没有车.\n");printf("Returnmainmeun(1.return0.quit)\n");scanf("%d",&flag);switch(flag){case0:system("cls");printf("Thanks,Welcometousenext\n");exit(0);case1:system("cls");}}voidList2(LinkQueueCar*W){QueueNode*p;p=W->head->next;if(W->head!=W->rear){printf("等待车辆的号码为:");while(p!=NULL){printf("%ld\n",p->data->num);p=p->next;}}elseprintf("便道里没有车.\n");printf("Returnmainmeun(1.return0.quit)\n");scanf("%d",&flag);switch(flag){case0:system("cls");printf("Thanks,Welcometousenext\n");exit(0);case1:system("cls");}}voidList(SeqStackCarS,LinkQueueCarW){inttag;printf("1.车场\n");printf("2.便道\n");printf("0.返回\n");scanf("%d",&tag);system("cls");switch(tag){case0:break;case1:List1(&S);break;case2:List2(&W);break;}}//=================================================================================================mainintmain(){SeqStackCarEnter,Temp;LinkQueueCarWait;intch;InitStack(&Enter);InitStack(&Temp);InitQueue(&Wait);AA:printf("停车场\n");printf("\n1.车辆到达\n");printf("2.车辆离开\n");printf("3.列表显示\n");printf("0.退出系统\n");scanf("%d",&flag);system("cls");switch(flag){case0:printf("Thanks,Welcometousenext\n");return0;case1:Arrive(&Enter,&Wait);gotoAA;case2:Leave(&Enter,&Temp,&Wait);gotoAA;case3:List(Enter,Wait);gotoAA;}return0;}//=================================================================================================7.测试情况:截图:程序输出为:TheSystemofparking1.cararrive2.carleave3.showcar0.quitsystemParkingLotplace:1arrivedtime:5:45number:2place:2arrivedtime:9:14number:1Returnmainmeun(1.return0.quit)课程设计的名称:二叉树的基本操作的实现1.问题描述:在主程序中编写一个简单的菜单,将有关二叉树的操作建立一棵二叉树的存储构造遍历一棵二叉树〔包括层次遍历〕统计二叉树叶子结点的个数求二叉树的深度子树交换2.基本要求:建立一棵二叉树的存储构造遍历一棵二叉树〔包括层次遍历〕统计二叉树叶子结点的个数求二叉树的深度子树交换3.算法思想:CreatBiTree()运用递归创造二叉树的每一个节点;Exchange()通过递归交换左右子树;Depth()通过递归计算二叉树的深度。InorderTraverse()递归中序遍历二叉树。PreOrderTraverse()递归先续遍历二叉树。PostOrderTraverse()递归后续遍历二叉树。4.模块划分:〔1〕BiTreeCreatBiTree(BiTreeT)其功能是创造一颗二叉树;〔2〕intDepth(BiTreeT)其功能是计算一颗二叉树的深度〔3〕voidExchange(BiTreeT)其功能是交换左右子树〔4〕voidInorderTraverse(BiTreeT)其功能是中序遍历〔5〕voidPreOrderTraverse(BiTreeT)其功能是前序遍历〔6〕voidPostOrderTraverse(BiTreeT)其功能是后序遍历5.数据构造:〔1〕数据类型BiTNode定义如下:typedefstructBiTNode{chardata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;6.源程序:源代码//main.c#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedefstructBiTNode{chardata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;voidLevelOrder(BiTreeT);voidInorderTraverse(BiTreeT);BiTreeCreatBiTree(BiTreeT);intDepth(BiTreeT);voidExchange(BiTreeT);intNodeCount(BiTreeTi);voidPostOrderTraverse(BiTreeT);voidPreOrderTraverse(BiTreeT);BiTreeCreatBiTree(BiTreeT){charch;scanf("%c",&ch);if(ch=='#')T=NULL;else{T=(BiTNode*)malloc(sizeof(BiTNode));if(!T){exit(0);printf("error");}T->data=ch;T->lchild=CreatBiTree(T->lchild);T->rchild=CreatBiTree(T->rchild);}returnT;}intDepth(BiTreeT){intLNum,RNum;if(T==NULL){return0;}else{LNum=Depth(T->lchild);RNum=Depth(T->rchild);if(LNum>RNum)return(LNum+1);elsereturn(RNum+1);}}voidExchange(BiTreeT){BiTNode*p;if(T){p=T->lchild;T->lchild=T->rchild;T->rchild=p;Exchange(T->lchild);Exchange(T->rchild);}}voidInorderTraverse(BiTreeT){if(T){InorderTraverse(T->lchild);printf("%c",T->data);InorderTraverse(T->rchild);}}voidLevelOrder(BiTreeT){BiTreeQueue[20],b;intfront,rear;front=rear=0;if(T){printf("LevelOrder:");Queue[rear++]=T;while(front!=rear){b=Queue[front++];printf("%2c",b->data);if(b->lchild!=NULL)Queue[rear++]=b->lchild;if(b->rchild!=NULL)Queue[rear++]=b->rchild;}}}intNodeCount(BiTreeTi){if(Ti==NULL)return0;elsereturnNodeCount(Ti->lchild)+NodeCount(Ti->rchild)+1;}voidPostOrderTraverse(BiTreeT){if(T){PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);printf("%c",T->data);}}voidPreOrderTraverse(BiTreeT){if(T){printf("%c",T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}}intmain(){BiTreeT=NULL;intchoice;while(1){printf("1-CreatBiTree.\n");printf("2-PreOrderTraverse.\n");printf("3-InorderTraverse.\n");printf("4-PostOrderTraverse.\n");printf("5-LevelOrderTraverse.\n");printf("6-NodeCount.\n");printf("7-BiTreeDepth.\n");printf("8-BiTreeExchange.\n");printf("0-exit\n");printf("Pleaseinputthenumofyourchoice:");scanf("%d",&choice);fflush(stdin);switch(choice){case1:{T=CreatBiTree(T);printf("CreatSucessful");break;}case2:{PreOrderTraverse(T);break;}case3:{InorderTraverse(T);break;}case4:{PostOrderTraverse(T);break;}case5:{LevelOrder(T);break;}case6:{printf("TheNodeCountis%d",NodeCount(T));break;}case7:{printf("Depthis%d",Depth(T));break;}case8:{Exchange(T);break;}case0:exit(0);break;default:break;}if(getchar())system("cls");}return0;}7.测试情况:截图:程序输出为:Pleaseinputthenumofyourchoice:5LevelOrder:ACBEDPleaseinputthenumofyourchoice:7Depthis3Pleaseinputthenumofyourchoice:6TheNodeCountis5课程设计的名称:图的基本操作的实现问题描述:在主程序中建立一个菜单,实现图的基本操作基本要求:图的基本操作,包括:建立图的存储构造,实现图的深度优先搜索遍历,广度优先搜索遍历利用图的拓扑排序验证图中是否存在环算法思想:createGraph()通过for循环利用链表构造录入点和边的数据。BFS()和DFS()以及TopologicalSort()利用递归思想实现遍历和排序。模块划分:voidcreateGraph()其功能为录入点和边以及其关系的数据。voidBFS(ALGraph&G,intv)其功能为实现广度优先遍历voidDFS(ALGraph&G,intv)其功能为实现深度优先遍历voidTopologicalSort(ALGraph&G)其功能为拓扑排序数据构造:数据类型LNode定义如下:typedefstruct{intvexs[40];intarcs[40][40];intvexnum,arcnum;intkind;}MGRAPH;数据类型LNode定义如下:typedefstruct{intadjvex;structnode3*next;}EDGENODE;数据类型LNode定义如下:typedefstruct{intvertex;EDGENODE*link;intid;}VEXNODE;数据类型LNode定义如下:typedefstruct{VEXNODEadjlist[40];intvexnum,arcnum;intkind;}ADJGRAPH;源程序:源代码:#include<cstdlib>#include<iostream>#include<stdio.h>#include<malloc.h>#include<string.h>#include<stack>#defineMaxsize30#defineINFINITY99999usingnamespacestd;intvisited[100];typedefstructArcNode{intadjvex;structArcNode*nextarc;}ArcNode;typedefstructVnode{intdata;ArcNode*firstarc;}VNode;typedefVNodeAdjLis[100];typedefstructadjlist{charname[10];intindegree;ArcNode*firstarc;}adjlist;typedefstruct{intn,e;intvexnum,arcnum;adjlistver[Maxsize];}ALGraph;voidFindInDegree(ALGraph&G){intindeg,i,j;ArcNode*p;for(i=0;i<G.vexnum;i++){indeg=0;for(j=0;j<G.vexnum;j++){if(G.ver[j].firstarc!=NULL){p=G.ver[j].firstarc;while(p){if(p->adjvex==i)indeg++;p=p->nextarc;}//while}//if}//forG.ver[i].indegree=indeg;}//for}voidTopologicalSort(ALGraph&G){inti,j,e,count;stack<int>s;ArcNode*p;FindInDegree(G);for(i=0;i<G.vexnum;i++)if(!G.ver[i].indegree)s.push(i);count=0;//对顶点进展计数while(!s.empty()){e=s.top();count++;s.pop();for(p=G.ver[e].firstarc;p;p=p->nextarc){if(!(--G.ver[p->adjvex].indegree))s.push(p->adjvex);}//for}//whileif(count<G.vexnum){cout<<"该有向图有回路\n";return;}//ifelse{cout<<"该有向图无回路\n";return;}}intLocatecity(ALGraphG,charv[]){inti;for(i=0;i<G.vexnum;i++)if(!strcmp(G.ver[i].name,v))break;returni;}voidDFS(ALGraph&G,intv){ArcNode*p;visited[v]=1;printf("%3d",v);p=G.ver[v].firstarc;while(p!=NULL){if(visited[p->adjvex]==0){DFS(G,p->adjvex);}p=p->nextarc;}}voidBFS(ALGraph&G,intv){ArcNode*p;intqueue[100],front=0,rear=0;intvisited[100];intw,i;for(i=0;i<G.vexnum;i++)visited[i]=0;printf("%3d",v);visited[v]=1;rear=(rear+1)%100;queue[rear]=v;while(front!=rear){front=(front+1)%100;w=queue[front];p=G.ver[w].firstarc;while(p!=NULL){if(visited[p->adjvex]==0){printf("%3d",p->adjvex);visited[p->adjvex]=1;rear=(rear+1)%100;queue[rear]=p->adjvex;}p=p->nextarc;}}cout<<endl;}voidcreateGraph(){ALGraphG;cout<<"请输入图的顶点个数:";cin>>G.vexnum;cout<<"请输入边数:";cin>>G.arcnum;for(inti=0;i<G.vexnum;i++){cout<<"第"<<i+1<<"个顶点的名称:";cin>>G.ver[i].name;G.ver[i].indegree=0;G.ver[i].firstarc=NULL;}intn,m;charv1[10],v2[10];for(intj=0;j<G.arcnum;j++){cout<<"请输入第"<<j+1<<"条边的起始位置与终止位置:";cin>>v1>>v2;n=Locatecity(G,v1);m=Locatecity(G,v2);ArcNode*p,*q,*t;p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=m;p->nextarc=NULL;if(G.ver[n].firstarc==NULL)G.ver[n].firstarc=p;else{q=G.ver[n].firstarc;while(q->nextarc)q=q->nextarc;q->nextarc=p;}}cout<<"深度遍历排序:";DFS(G,0);cout<<endl<<"广度遍历排序:";BFS(G,0);TopologicalSort(G);}intmain(){createGraph();return0;}测试情况:截图:程序输出为:请输入图的顶点个数:4请输入边数:4第1个顶点的名称:a第2个顶点的名称:b第3个顶点的名称:c第4个顶点的名称:d请输入第1条边的起始位置与终止位置:ab请输入第2条边的起始位置与终止位置:ac请输入第3条边的起始位置与终止位置:ad请输入第4条边的起始位置与终止位置:bc深度遍历排序:0123广度遍历排序:0123该有向图无回路课程设计的名称:哈希查找的设计与实现问题描述:编写一个程序实现哈希表的相关运算。基本要求:完成如下功能:〔1〕建立{16,74,60,43,54,90。46,31,29,88,77}哈希表A[0..12],哈希函数为H〔k〕=key%p,并用线性探查法解决冲突;〔2〕在上述哈希表中查找关键字为29的记录;〔3〕在上述哈希表中删除关键字为77的记录,再将其插入。3.算法思想:CreatHT()通过m次循环对哈希表初始化。InsertHT()通过循环体将数组内元素放入哈希表中SearchHT()采用线性探查法找下一个地址DeleteHT()调用SearchHT()找到该关键字并删除DispHT()利用循环体输出哈希表4.模块划分:voidCreatHT(HashTableha,intx[],intn,intm,intp)创立哈希表;intInsertHT(HashTableha,intn,intk,intp)将关键字插入到哈希表中intSearchHT(HashTableha,intp,intk)在哈希表中查找关键字intDeleteHT(HashTableha,intp,intk,intn)删除哈希表中的某一关键字5.数据构造:〔1〕数据类型HashTablep[]定义如下:typedefstructHashTable{intkey;char*data;intcount;}HashTable[100];6.源程序:源代码#include<stdio.h>#include<stdlib.h>typedefstructHashTable{intkey;char*data;intcount;}HashTable[100];intInsertHT(HashTableha,intn,intk,intp)//将关键字插入到哈希表中{inti,adr;adr=k%p;if(ha[adr].key==-1||ha[adr].key==-2){ha[adr].key=k;ha[adr].count=1;}

温馨提示

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

评论

0/150

提交评论