公交路线查询系统基于数据结构和C语言.docx
- 文档编号:24043285
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:22
- 大小:17.96KB
公交路线查询系统基于数据结构和C语言.docx
《公交路线查询系统基于数据结构和C语言.docx》由会员分享,可在线阅读,更多相关《公交路线查询系统基于数据结构和C语言.docx(22页珍藏版)》请在冰豆网上搜索。
公交路线查询系统基于数据结构和C语言
#include
#include
#include
#include
#definemax30
#definelen20
#defineMAX100
typedefstructLinedot{//Õ¾
intstopno;//Õ¾ºÅ
charstopname[max];//Õ¾Ãû
structLinedot*next;
}linedot,*dot;
typedefstructlineway{//Ïß·
intlineNo;//Ïß·ºÅ
intstopnum;//¸ÃÏß·ÉÏÕ¾µÄ¸öÊý
dotstop;//Õ¾
}way;
typedefstructlineNode{
intlinenum;//Ïß·ÌõÊý
waydata[len];//Ïß·
}line;
typedefstructco_Node{
intzhanNo;
intbusNo;
structco_Node*next;
}co_node,*co_zhan;
typedefstructNode{
intfirstbus;//ʼ·¢³µºÅ
charstopname[max];//Õ¾Ãû
co_zhanzhan;
}node,*list;
typedefstructzhanNode{
intvexnum;//¶¥µãÊý
intarcnum;//»¡Êý
nodevexs[max];//¶¥µã
}spot;
typedefstructsqNode//¶¨ÒåË«Ïò¶ÓÁÐ
{
intdata;
structsqNode*prior;
structsqNode*next;
}sqnode,*sqlist;
typedefstruct//Ë«ÏòÁ´¶ÓÁÐÀàÐÍ
{
sqlistfront;
sqlistrear;
}LQ;
voidinitqueue(LQ*Q)//³õʼ»¯¶ÓÁÐ
{
Q->front=Q->rear=newsqnode;
Q->front->data=Q->rear->data=-1;
Q->front->next=Q->rear->next=NULL;
Q->front->prior=Q->rear->prior=NULL;
}
voidenqueue(LQ*Q,inte)//½ø¶Ó
{
sqlistp;
p=newsqnode;
p->data=e;
p->next=NULL;
p->prior=Q->front;
Q->rear->next=p;
Q->rear=p;
}
voiddequeue(LQ*Q,int*e)//³ö¶Ó
{
Q->front=Q->front->next;
if(Q->front!
=NULL)
*e=Q->front->data;
else
*e=-1;
}
typedefstructstackNode//¶¨ÒåÕ»
{
intfiguer;
structstackNode*next;
}stacknode,*stack;
voidinitstack(stack*S)//³õʼ»¯Õ»
{
*S=NULL;
}
voidpush(stack*S,inte)//½øÕ»
{
stackp;
p=newstacknode;
p->figuer=e;
p->next=*S;
*S=p;
}
intpop(stack*S,int*e)//³öÕ»
{
stackp=*S;
if(p==NULL)
{
printf("Õ»¿Õ!
\n");
return0;
}
*e=p->figuer;
*S=(*S)->next;
deletep;
return1;
}
voidgettop(stackS,int*e)//µÃµ½Õ»¶¥
{
if(S==NULL)
{
printf("Õ»¿Õ!
\n");
return;
}
*e=S->figuer;
}
intlocate(spotC,chare[])
{
inti;
for(i=0;i { if(strcmp(C.vexs[i].stopname,e)==0) returni; } if(i>C.vexnum) { printf("Notfound! \n"); return-1; } } voidinit(FILE*fp,line*W,spot*C)//¹«½»Ïß·³õʼ»¯ { dotp,q; co_zhanR; inti,j,m,n,num; charvex1[max],vex2[max]; if((fp=fopen("f.txt","r"))==NULL)//´ò¿ªÎļþ { printf("Thefileerror! \n"); getchar(); exit(0); } fscanf(fp,"%d",&W->linenum); for(i=0;i fscanf(fp,"%d%d",&W->data[i].lineNo,&W->data[i].stopnum);//ÊäÈëÏß·ºÅºÍ¸ÃÏß·ÉÏÕ¾µÄ¸öÊý for(i=0;i { W->data[i].stop=NULL; for(j=0;j { p=newlinedot; p->next=NULL; fscanf(fp,"%d%s",&p->stopno,p->stopname);//ÊäÈëÕ¾Ãû q=W->data[i].stop; if(! q) W->data[i].stop=p; else { while(q->next) q=q->next; q->next=p; } } } fscanf(fp,"%d%d",&C->vexnum,&C->arcnum); for(i=0;i { fscanf(fp,"%s%d",C->vexs[i].stopname,&C->vexs[i].firstbus); C->vexs[i].zhan=NULL; } for(i=0;i { fscanf(fp,"%s%s%d",vex1,vex2,&num); m=locate(*C,vex1); n=locate(*C,vex2); R=newco_node; R->zhanNo=n; R->busNo=num; R->next=C->vexs[m].zhan; C->vexs[m].zhan=R; } } voidsearch1(lineW)//²éѯָ¶¨³µ´ÎµÄÏß·¼°Í¾¾Õ¾µã { dotp; inti,n,k=0; printf("ÇëÊäÈë³µ´Î: "); scanf("%d",&n); for(i=0;i { if(W.data[i].lineNo==n) { p=W.data[i].stop; while(p) { if(k==0) printf("%s",p->stopname); else printf("->%s",p->stopname); p=p->next; k++; } } } } voidsearch2(lineW,spotC) { intk,i; charvex[max]; dotp; printf("ÇëÊäÈëÕ¾µãÃû: "); scanf("%s",vex); k=locate(C,vex); if(C.vexs[k].firstbus! =0) printf("¸ÃÕ¾µãµÄʼ·¢³µÓÐ: %d\n",C.vexs[k].firstbus); else printf("¸ÃÕ¾ÎÞʼ·¢³µ! \n"); printf("¸ÃÕ¾µãµÄ¹ý·³µÓÐ: "); for(i=0;i { p=W.data[i].stop; if(! p) continue; while(p) { if(strcmp(p->stopname,vex)==0&&p! =W.data[i].stop) printf("%d",W.data[i].lineNo); p=p->next; } } } intstackempty(stackS) { if(S==NULL) return1; return0; } voidupdown(stackS,stack*S1) { stackp; while(! stackempty(S)) { p=newstacknode; p->figuer=S->figuer; p->next=*S1; *S1=p; S=S->next; } } voidprintstack(spotC,stackS)//´òÓ¡Õ»ÀïµÄÔªËØ { stackS1,p; co_zhanq; initstack(&S1); updown(S,&S1); p=S1; while(p) {q=C.vexs[p->figuer].zhan; while(q) { if(p->next==NULL) break; if(q->zhanNo! =p->next->figuer) q=q->next; else break; } printf("%s-%d->",C.vexs[p->figuer].stopname,q->busNo); p=p->next; } } voidprintqueue(sqlistQ,spotC) { sqlistp; stackS,S1; initstack(&S); initstack(&S1); p=Q; while(p->data! =-1) { push(&S,p->data); p=p->prior; } updown(S,&S1); printstack(C,S1); } voidsearch3(spotC,ints,inte) { co_zhanp; intflag; LQQ; sqlistq; intu,k,i=1; initqueue(&Q); enqueue(&Q,s); while(Q.front! =Q.rear) { dequeue(&Q,&u); p=C.vexs[u].zhan; if(u==e) { printf("-->>Line%d: ",i++); printqueue(Q.front->prior,C); printf("%s\n",C.vexs[e].stopname); dequeue(&Q,&u); if(u==-1) break; p=C.vexs[u].zhan; } while(p) { k=p->zhanNo; q=Q.front; while(q->prior! =NULL) { if(q->data! =k) { q=q->prior; flag=1; } else { flag=0; break; } } if(k! =s&&flag==1) enqueue(&Q,k); p=p->next; } } } voidsearch4(spotC,ints,inte,LQ*Q,intvisit[]) { intu,k; co_zhanp; if(! visit[s]) { visit[s]=1; enqueue(Q,s); while(Q->front! =Q->rear) { dequeue(Q,&u); p=C.vexs[u].zhan; if(u==e) { printf("-->>Line: "); printqueue(Q->front->prior,C); printf("%s\n",C.vexs[e].stopname); break; } while(p) { k=p->zhanNo; if(! visit[k]) { visit[k]=1; enqueue(Q,k); } p=p->next; } } } } intcount(spotC,stackS,inte) { inti,j,n=0,No=-1; stackp; co_zhanq; p=S; while(p) { i=p->figuer; p=p->next; if(! p) break; j=p->figuer; q=C.vexs[i].zhan; while(q) { if(q->zhanNo==j&&q->busNo! =No) { n++; No=q->busNo; break; } else q=q->next; } } returnn-1; } voiddestroy(stack*S) { stackp=*S; while(! stackempty(*S)) { *S=(*S)->next; delete(p); p=*S; } } voidsavestack(stackS,stack*S2) { stackS1; initstack(&S1); updown(S,&S1); updown(S1,S2); } voidchange(sqlistQ,stack*S) { sqlistp; p=Q; while(p->data! =-1) { push(S,p->data); p=p->prior; } } voidsearch5(spotC,ints,inte,stack*S,stack*S2,int*m) { co_zhanp; intflag; LQQ; sqlistq; intu,k,n1,n=MAX,i=1; initqueue(&Q); enqueue(&Q,s); while(Q.front! =Q.rear) { dequeue(&Q,&u); p=C.vexs[u].zhan; if(u==e) { change(Q.front,S); n1=count(C,*S,e); if(n1 { savestack(*S,S2); n=n1; *m=n; } destroy(S); dequeue(&Q,&u); if(u==-1) break; p=C.vexs[u].zhan; } while(p) { k=p->zhanNo; q=Q.front; while(q->prior! =NULL) { if(q->data! =k) { q=q->prior; flag=1; } else { flag=0; break; } } if(k! =s&&flag==1) enqueue(&Q,k); p=p->next; } } } intmenu() { intn; printf("*******************»¶ÓʹÓÃK³Ç¹«½»²éѯϵͳ******************\n"); printf("**************1.²éѯָ¶¨³µ´ÎµÄÏß·¼°Í¾¾Õ¾µã****************\n"); printf("**************2.²éѯָ¶¨Õ¾µãµÄʼ·¢³µºÍ¹ý·³µ****************\n"); printf("**************3.²éѯָ¶¨ÆðµãºÍÖÕµãËù¾µÄËùÓÐÏß·************\n"); printf("**************4.²éѯָ¶¨ÆðµãºÍÖÕµãËù¾Õ¾µã×îÉÙµÄÏß·********\n"); printf("**************5.²éѯָ¶¨ÆðµãºÍÖյ㻻³Ë´ÎÊý×îÉٵij˳µÂ·Ïß****\n"); printf("**************0.Í˳ö****************************************\n"); printf("************************************************************\n"); printf("-----ÆðµãÕ¾: µçÁ¦´óѧ/ÖìÐÁׯ/±±½¼Å©³¡ÇŶ«/¾©²ý·»ØÁú¹Û/±±¾©Ê¦\n"); printf("·¶´óѧ/µÂʤÃÅÎ÷/Ç廪´óѧÎ÷ÃÅ/Ô²Ã÷Ô°/ÒúÍÔ°/Ïãɽ\n"); printf("-----ÖÕµãÕ¾: µçÁ¦´óѧ/ÖìÐÁׯ/±±½¼Å©³¡ÇŶ«/¾©²ý·»ØÁú¹Û/±±¾©Ê¦\n"); printf("·¶´óѧ/µÂʤÃÅÎ÷/Ç廪´óѧÎ÷ÃÅ/Öйشå/Ô²Ã÷Ô°/ÒúÍÔ°\n"); printf("/Î÷µ¥\n"); printf("-----¹«½»Ïß·: 345/442/696/681/699/826\n"); printf("************************************************************\n"); printf("ÇëÑ¡Ôñ: "); scanf("%d",&n); getchar(); returnn; } voidmain() { stackS,S2,S3; LQQ; intn,m,i,s,e,k=1,visit[len],u; charch='Y',start[max],end[max]; FILE*fp; lineW; spotC; init(fp,&W,&C); do { n=menu(); switch(n) { case1: search1(W);break; case2: search2(W,C);break; case3: for(i=0;i visit[i]=0; initstack(&S); printf("ÇëÊäÈëÆðµãºÍÖÕµã: "); scanf("%s%s",start,end); s=locate(C,start); e=locate(C,end); printf("%sµ½%sµÄËùÓзÏßÈçÏÂ: \n",C.vexs[s].stopname,C.vexs[e].stopname); search3(C,s,e);break; case4: for(i=0;i visit[i]=0; initqueue(&Q); printf("ÇëÊäÈëÆðµãºÍÖÕµã: "); scanf("%s%s",start,end); s=locate(C,start); e=locate(C,end); printf("%sµ½%sµÄ×î¶Ì·ÏßÈçÏÂ: \n",C.vexs[s].stopname,C.vexs[e].stopname); search4(C,s,e,&Q,visit);break; case5: initstack(&S); initstack(&S2); initstack(&S3); printf("ÇëÊäÈëÆðµãºÍÖÕµã: "); scanf("%s%s",start,end); s=locate(C,start); e=locate(C,end); printf("%sµ½%sµÄ×îÉÙ»»³Ë·ÏßÈçÏÂ: \n",C.vexs[s].stopname,C.vexs[e].stopname); search5(C,s,e,&S,&S2,&m); updown(S2,&S3); pop(&S3,&u); printf("-->>Line: "); printstack(C,S3); printf("%s\n",C.vexs[e].stopname); printf("¹²»»³Ë%d´Î\n",m);break; case0: exit(0);break; default: printf("error! \n"); } getchar(); printf("\n¼ÌÐøÂð£¿Y/N: "); scanf("%c",&ch); }while(ch=='Y'||ch=='y');
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 公交路线 查询 系统 基于 数据结构 语言