公交路线查询系统基于数据结构和C语言.docx

上传人:b****7 文档编号:24043285 上传时间:2023-05-23 格式:DOCX 页数:22 大小:17.96KB
下载 相关 举报
公交路线查询系统基于数据结构和C语言.docx_第1页
第1页 / 共22页
公交路线查询系统基于数据结构和C语言.docx_第2页
第2页 / 共22页
公交路线查询系统基于数据结构和C语言.docx_第3页
第3页 / 共22页
公交路线查询系统基于数据结构和C语言.docx_第4页
第4页 / 共22页
公交路线查询系统基于数据结构和C语言.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

公交路线查询系统基于数据结构和C语言.docx

《公交路线查询系统基于数据结构和C语言.docx》由会员分享,可在线阅读,更多相关《公交路线查询系统基于数据结构和C语言.docx(22页珍藏版)》请在冰豆网上搜索。

公交路线查询系统基于数据结构和C语言.docx

公交路线查询系统基于数据结构和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;ilinenum;i++)

fscanf(fp,"%d%d",&W->data[i].lineNo,&W->data[i].stopnum);//ÊäÈëÏß·ºÅºÍ¸ÃÏß·ÉÏÕ¾µÄ¸öÊý

for(i=0;ilinenum;i++)

{

W->data[i].stop=NULL;

for(j=0;jdata[i].stopnum;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;ivexnum;i++)

{

fscanf(fp,"%s%d",C->vexs[i].stopname,&C->vexs[i].firstbus);

C->vexs[i].zhan=NULL;

}

for(i=0;iarcnum;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模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1