北京工业大学-计算机软件基础考试习题课件.ppt

上传人(卖家):晟晟文业 文档编号:4561157 上传时间:2022-12-19 格式:PPT 页数:106 大小:743.50KB
下载 相关 举报
北京工业大学-计算机软件基础考试习题课件.ppt_第1页
第1页 / 共106页
北京工业大学-计算机软件基础考试习题课件.ppt_第2页
第2页 / 共106页
北京工业大学-计算机软件基础考试习题课件.ppt_第3页
第3页 / 共106页
北京工业大学-计算机软件基础考试习题课件.ppt_第4页
第4页 / 共106页
北京工业大学-计算机软件基础考试习题课件.ppt_第5页
第5页 / 共106页
点击查看更多>>
资源描述

1、l1名词解释:数据,数据元素,数据结构。名词解释:数据,数据元素,数据结构。数据:数据:数据就是计算机可以保存和处理的信息。数据就是计算机可以保存和处理的信息。数据元素:数据元素:是组成数据的基本单位。是组成数据的基本单位。数据元素可以是一个数或字符串,也可以由数据元素可以是一个数或字符串,也可以由若干数据项组成。若干数据项组成。数据项是数据的最小单位数据项是数据的最小单位。l数据结构数据结构:简单地说,数据结构就是研究数据及数:简单地说,数据结构就是研究数据及数据元素之间关系的一门学科。据元素之间关系的一门学科。它包括三个方面的内它包括三个方面的内容:容:数据的逻辑结构、数据的存储结构和数据

2、的运数据的逻辑结构、数据的存储结构和数据的运算。算。数据结构数据结构是指数据之间的相互关系,即数据的组是指数据之间的相互关系,即数据的组织形式。可以从集合的观点对数据结构加以形式化描织形式。可以从集合的观点对数据结构加以形式化描述,即是一个二元组:述,即是一个二元组:Data-Structure=(D,R)l其中:其中:D是数据元素的集合,是数据元素的集合,R是是D上关系的集合。上关系的集合。l逻辑结构逻辑结构:数据的逻辑结构是指反映数据元素之间逻:数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构,它与数据的存储无关,是独立于辑关系的数据结构,它与数据的存储无关,是独立于计算机的。计算机的

3、。l存储结构存储结构:数据的存储结构是逻辑结构用计算机语言数据的存储结构是逻辑结构用计算机语言的实现的实现(亦称映像亦称映像),它是依赖于计算机语言的。,它是依赖于计算机语言的。l算法算法:是由若干条指令组成的有限序列。:是由若干条指令组成的有限序列。l2简述算法的五要素。简述算法的五要素。有穷性:每条指令的执行次数必须是有限的。有穷性:每条指令的执行次数必须是有限的。确定性:每条指令的含义必须明确,无二义性。确定性:每条指令的含义必须明确,无二义性。可行性:每条指令都应在有限的时间内完成。可行性:每条指令都应在有限的时间内完成。输入性:具有零个或多个输入量,即算法开始前对输入性:具有零个或多

4、个输入量,即算法开始前对算法给出的初始量。算法给出的初始量。输出性:至少产生一个输出。输出性:至少产生一个输出。l3评价一个评价一个“正确的正确的”算法主要有哪两个指算法主要有哪两个指标?标?l(1)时间复杂度时间复杂度:依据算法编制成程序后,在计算机:依据算法编制成程序后,在计算机上运行时所消耗的时间。上运行时所消耗的时间。l(2)空间复杂度空间复杂度:依据算法编制成程序后,在计算机:依据算法编制成程序后,在计算机执行过程中所需要的最大存储空间。执行过程中所需要的最大存储空间。l4描述以下三个概念的描述以下三个概念的区别区别:头指针、头结:头指针、头结点、首元结点点、首元结点(第一个元素结点

5、第一个元素结点)。l头指针头指针就是指向链表中第一个结点的指针。单链表是就是指向链表中第一个结点的指针。单链表是由头指针唯一确定的。因此可以用头指针的名字来命由头指针唯一确定的。因此可以用头指针的名字来命名单链表。名单链表。l头结点头结点是在单链表第一个元素所在结点之前附设的一是在单链表第一个元素所在结点之前附设的一个结点。头结点的指针域存储第一个元素所在结点的个结点。头结点的指针域存储第一个元素所在结点的存储位置;数据域可以不存储任何信息,也可以存储存储位置;数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息。设置头结点后,可使空如线性表的长度等附加信息。设置头结点后,可使空表和非

6、空表的逻辑状态及运算统一起来。表和非空表的逻辑状态及运算统一起来。l首元结点首元结点就是第一个数据元素所在的结点。就是第一个数据元素所在的结点。l5有一线性表存储在一个带头结点的循环单有一线性表存储在一个带头结点的循环单链表链表L中,写出计算线性表元素个数的算法。中,写出计算线性表元素个数的算法。lint length(NODE*L)l NODE *p;l int counter=0;l p=L-next;l while(p!=L)l p=p-next;l counter+;l return counter;l 6假设有一个假设有一个循环单链表循环单链表的长度大于的长度大于1,且表,且表中既无

7、头结点也无头指针。已知中既无头结点也无头指针。已知S为指向链表为指向链表中某结点的指针,试编写算法,在链表中删除中某结点的指针,试编写算法,在链表中删除结点结点S的前趋结点。的前趋结点。l提示:提示:l(1)定义一个指针变量定义一个指针变量p指向结点指向结点*s的直接后继;的直接后继;l(2)定义一个指针变量定义一个指针变量q指向结点指向结点*s;l(3)当当p-next不等于不等于s时,令时,令q=p,p=p-next;重复上述处理直至重复上述处理直至p-next=s;l(4)令令q-next=s;free(p)。lvoid delprior(NODE*s)l NODE*p,*q;l p=s

8、-next;q=s;l while(p-next!=s)l q=p;p=p-next;l q-next=s;l free(p);ll7已知指针已知指针ha和和hb分别指向两个单链表的头分别指向两个单链表的头结点,且头结点的数据域中存放链表的长度,结点,且头结点的数据域中存放链表的长度,试写一算法将这两个链表连接在一起试写一算法将这两个链表连接在一起(即令其中即令其中一个表的首元结点连在另一个表的最后一个结一个表的首元结点连在另一个表的最后一个结点之后点之后),hc指向连接后的链表的头结点,并要指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分求算法以尽可能短的时间完成连接运

9、算。请分析你的算法的时间复杂度。析你的算法的时间复杂度。l8设计一个将线性链表进行逆置的算法。设计一个将线性链表进行逆置的算法。l对于单链表,借助中间变量实现数据元素指针域中地对于单链表,借助中间变量实现数据元素指针域中地址值的变化。参见址值的变化。参见Shiyan12.c的的 reverse()函数。函数。l9设有多项式设有多项式l A(x)=7+3x+9x8+3x15l B(x)=5x+6x7-9x8l(1)用单链表给出用单链表给出A(x)的存储表示;的存储表示;l(2)用单链表给出用单链表给出B(x)的存储表示;的存储表示;l数据存储结构:数据存储结构:l typedef struct

10、polyterm l int coef;l int exp;l struct polyterm*next;l TERM;l10设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。l1,2,3,4 1,2,4,3 1,3,2,4l1,3,4,2 1,4,3,2 2,1,3,4l2,1,4,3 2,3,1,4 2,3,4,1l2,4,3,1 3,2,1,4 3,2,4,1l3,4,2,1 4,3,2,1l11假设以带头结点的循环单链表表示队列,假设以带头结点的循环单链表表示队列,并且只设一个指针指向队尾元素结点并且只设一个指针指向队尾元素结点

11、(不设头指不设头指针针),试编写相应的入列和出列算法。,试编写相应的入列和出列算法。l12假设以数组假设以数组sequm存放循环队列的元素存放循环队列的元素,同时设变量,同时设变量rear和和quelen分别指示队尾元素分别指示队尾元素的位置和内含元素的个数。试给出此循环队列的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入列和出列算法。的队满条件,并写出相应的入列和出列算法。l队满条件:队满条件:quelen=mlstep1.判定循环队列是否已满,若满,则给出队列溢判定循环队列是否已满,若满,则给出队列溢出出错信息;出出错信息;lstep2.队尾指针后移,将入队元素放入队尾指

12、针所指队尾指针后移,将入队元素放入队尾指针所指的存储位置。的存储位置。lstep3.队列元素个数增队列元素个数增1。l#define MAXSIZE ml /*m为队列中数据元素个数的最大可能值为队列中数据元素个数的最大可能值*/l int sequMAXSIZE;l /*假设数据元素的类型为整型假设数据元素的类型为整型*/l int quelen=0,rear=MAXSIZE-1;lvoid addqueue(int x)lif(quelen=MAXSIZE)lprintf(循环队列已满,上溢循环队列已满,上溢!n);lexit(1);llelse lrear=(rear+1)%MAXSIZ

13、E;lsequ rear=x;lquelen+;lllstep1.判定循环队列是否为空,若空,则给出队列溢判定循环队列是否为空,若空,则给出队列溢出出(下溢下溢)信息;信息;lstep2.计算队头指针值,并读取队头元素;计算队头指针值,并读取队头元素;lstep3.队列元素个数减队列元素个数减1。l#define MAXSIZE mlint sequMAXSIZE;lint quelen=0,rear=MAXSIZE-1;lint delqueue()lint front,x;lif(quelen=0)l printf(循环队列已空,下溢!循环队列已空,下溢!n);l x=-1;lelse l

14、 front=(rear-quelen+MAXSIZE+1)%MAXSIZE;l x=sequfront;l quelen-;llreturn x;ll13试将下列稀疏矩阵试将下列稀疏矩阵A用三元组形式来表示。用三元组形式来表示。0 3 0 0 -7 0 0 0 0 0 8 0 0 0 0 20 0 0 0 0 0 0 -13 0 0 A=05551123215-7331844120553-13l16二维数组二维数组A的元素是的元素是6个字符组成的串,行个字符组成的串,行下标下标i的范围从的范围从0到到8,列下标,列下标j的范围从的范围从1到到10。从供选择的答案中选出应填入下列关于数组存从供

15、选择的答案中选出应填入下列关于数组存储叙述中储叙述中()内的正确答案。内的正确答案。l (1)存放存放A至少需要至少需要()个字节。个字节。l (2)A的第的第8列和第列和第5行共占行共占()个字节。个字节。l (3)若若A按行存放,元素按行存放,元素A8,5 的起始地址与当的起始地址与当A按按列存放时的元素列存放时的元素()的起始地址一致。的起始地址一致。l 供选择答案供选择答案l(1)a.90;b.180;c.240;d.270;e.540;l(2)a.108;b.114;c.54;d.60;e.150;l(3)a.A8,5;b.A3,10;c.A5,8;d.A0,9。l(1)9*10*6

16、=540l(2)(9+9)*6=108l(3)8*10+5=85;85/9=9 余余 4l 答案:答案:A3,10;试验一:线性表的设计与实现试验一:线性表的设计与实现 l1.线性表基本操作的实现线性表基本操作的实现:数据的存储结构数据的存储结构l#define MaxSize 1024 typedef int DataType;typedef struct node DataType dataMaxSize;int last;SequenList;人人机交互部分机交互部分l内容:通过屏幕提示功能选择菜单;内容:通过屏幕提示功能选择菜单;通过键盘输入实现功能的选择;通过键盘输入实现功能的选择;

17、l要求:提示内容清晰易读,要求:提示内容清晰易读,键盘操作简单准确;键盘操作简单准确;l实现:循环扫描键盘,等待用户输入;实现:循环扫描键盘,等待用户输入;根据输入内容确定要执行的分支程序。根据输入内容确定要执行的分支程序。lint main()l SequenList MyList,*L;l char cmd;l int i,t,x;l L=&MyList;L-last=-1;l do l do l clrscr();l printf(nt c,C.Create Listn);l printf(nt i,I.Insert);l printf(nt d,D.Delete);l printf(n

18、t q,Q.QuitntYour choice:);l cmd=getchar();l while(?);while(cmd!=d)&(cmd!=D)&(cmd!=q)&(cmd!=Q)&(cmd!=i)&(cmd!=I)&(cmd!=c)&(cmd!=C);While(toupper(cmd)!=D)&(toupper(cmd)!=Q)&(toupper(cmd)!=I)&(toupper(cmd)!=C);l switch(cmd)l case c:l case C:CreateList(L);break;l case i:l case I:?Insert(L,x,i);PrintOut(

19、L);l getch();break;l case d:l case D:?l Delete(L,i);PrintOut(L);l getch();break;l default:break;l l while(cmd!=q)&(cmd!=Q);lprintf(nInput the data to be inserted:);scanf(%d,&x);printf(nInput the poistion to be inserted:);printf(n(1-%d)n,(L-last+2);scanf(%d,&i);printf(nInput the index_No of data to b

20、e deletedn);printf(n(1-%d):n,(L-last+1);scanf(%d,&i);while(toupper(cmd)!=Q);运算处理运算处理l内容:建表、插入、删除、输出;内容:建表、插入、删除、输出;l实现:利用指针变量作为函数参数,传递实现:利用指针变量作为函数参数,传递 线性表地址;线性表地址;void CreateList(SequenList*L)int n,i,mydata;printf(nPlease input total number of data itemn);scanf(%d,&n);for(i=0;idatai=mydata;L-last=

21、n-1;printf(nPress any key to continuen);getch();lint Insert(SequenList*L,DataType x,int i)l int j;l if(L-last=(MaxSize-1)l printf(nOverflow!);l return Null;l else if(i(L-last+2)l printf(range error);l return Null;l else l for(j=L-last;j=i-1;j-)l L-dataj+1=L-dataj;l L-datai-1=x;l L-last=L-last+1;l re

22、turn(1);lint Delete(SequenList*L,int i)int j;if(iL-last+1)printf(range error);return Null;else for(j=i;jlast;j+)L-dataj-1=L-dataj;L-last-;return(1);void PrintOut(SequenList*L)int i;for(i=0;ilast;i+)printf(data%d=,i+1);printf(%dt,L-datai);if(i!=0)&(i%4)=0)printf(n);l完善程序:完善程序:l#include l#include l#de

23、fine Null 0l线性表初值设置:线性表初值设置:l L-last=-1;l2.一元多项式的相加、相乘的程序设计一元多项式的相加、相乘的程序设计l数据存储结构:数据存储结构:l typedef struct polyterm l int coef;l int exp;l struct polyterm*next;l TERM;人人机交互部分机交互部分l内容:通过屏幕提示需要输入的数据和程内容:通过屏幕提示需要输入的数据和程序执行的结果;序执行的结果;l要求:提示内容清晰易读,要求:提示内容清晰易读,键盘操作简单准确。键盘操作简单准确。void main()TERM*ha,*hb,*hc,

24、*p,*q,*h;printf(nInput the 1st polynomial);ha=creatpoly();printf(nInput the 2nd polynomial);hb=creatpoly();printf(nthe 1st polynomial is:);polyout(ha);printf(nthe 2nd polynomial is:);polyout(hb);hc=polyadd(ha,hb);printf(nthe addition of the two polynomial is:);polyout(hc);h=polymulti(ha,hb);printf(n

25、the multiplication of the two polynomial is:);polyout(h);return;运算处理运算处理l内容:建表、相加、相乘、输出;内容:建表、相加、相乘、输出;l实现:使用指针变量作为函数返回的参数,实现:使用指针变量作为函数返回的参数,传递线性表地址;传递线性表地址;l条件:链表无头结点;条件:链表无头结点;多项式系数和指数均为多项式系数和指数均为int型数据;型数据;每个多项式数据输入的方式为:每个多项式数据输入的方式为:系数,指数系数,指数 数据按指数递减的顺序依次输入;数据按指数递减的顺序依次输入;结束多项式数据输入的条件是:结束多项式数据

26、输入的条件是:0,0lTERM*creatpoly()l TERM*head,*r,*s;l int m,n;l head=(TERM*)malloc(sizeof(TERM);l printf(input coef and exp(1,2):n);l scanf(%d,%d,&n,&m);l r=head;l while(n)l s=(TERM*)malloc(sizeof(TERM);l s-coef=n;s-exp=m;l r-next=s;r=s;l printf(nInput coef and exp:n);l scanf(%d,%d,&n,&m);l r-next=Null;r=h

27、ead;l head=head-next;free(r);/*无头结点无头结点*/l return(head);llTERM*polyadd(TERM*ha,TERM*hb)l TERM*hc,*p,*q,*s,*r;l int x;l p=ha;q=hb;/*无头结点无头结点 */l hc=(TERM*)malloc(sizeof(TERM);l s=hc;l while(p!=Null)&(q!=Null)l if(p-exp=q-exp)l x=p-coef+q-coef;l if(x!=0)l r=(TERM*)malloc(sizeof(TERM);l r-exp=p-exp;r-c

28、oef=x;l s-next=r;s=r;l p=p-next;q=q-next;l else if(p-expexp)l r=(TERM*)malloc(sizeof(TERM);l r-coef=q-coef;r-exp=q-exp;l s-next=r;s=r;l q=q-next;l else l r=(TERM*)malloc(sizeof(TERM);l r-exp=p-exp;r-coef=p-coef;l s-next=r;s=r;l p=p-next;l l while(p!=Null)l r=(TERM*)malloc(sizeof(TERM);l r-exp=p-exp;

29、r-coef=p-coef;l s-next=r;s=r;l p=p-next;l while(q!=Null)l r=(TERM*)malloc(sizeof(TERM);l r-exp=q-exp;r-coef=q-coef;l s-next=r;s=r;l q=q-next;l s-next=Null;r=hc;l hc=hc-next;free(r);l return(hc);llTERM*polymulti(TERM*f,TERM*g)l TERM*fp,*gp,*hp,*q,*h;l int maxp,p,r,x;l maxp=f-exp+g-exp;l h=(TERM*)mall

30、oc(sizeof(TERM);l hp=h;l g=reverse(g);l for(r=maxp;r=0;r-)l x=0;l fp=f;gp=g;while(fp!=Null)&(gp!=Null)p=fp-exp+gp-exp;if(pr)fp=fp-next;else if(pnext;else x+=fp-coef*gp-coef;fp=fp-next;gp=gp-next;/*end of while*/l if(x!=0)l q=(TERM*)malloc(sizeof(TERM);l q-exp=r;q-coef=x;l q-next=Null;l hp-next=q;hp=

31、q;l /*end of for*/l hp=h;h=h-next;l free(hp);l return(h);llTERM*reverse(TERM*q)l TERM*p1,*p2;l if(q!=Null)l p1=q-next;l q-next=Null;l while(p1!=Null)l p2=p1-next;p1-next=q;l q=p1;p1=p2;l /*end of while*/l l return(q);llvoid polyout(TERM*head)l TERM*p,*q;l p=head;l while(p!=Null)l printf(%d,%d,p-coef

32、,p-exp);l p=p-next;l printf(n);ll3.约瑟夫环的程序设计约瑟夫环的程序设计l数据存储结构描述:数据存储结构描述:l typedef struct tagnode l int num;l struct tagnode*next;l LinkList;l LinkList*head=Null,*last;人人机交互部分机交互部分l内容:通过屏幕提示需要输入的数据和程内容:通过屏幕提示需要输入的数据和程序执行的结果;序执行的结果;l要求:提示内容清晰易读,要求:提示内容清晰易读,键盘操作简单准确。键盘操作简单准确。lint main()l int n,m;l prin

33、tf(nInput the total number of people:n);l scanf(%d,&n);l printf(ninput the number of person you are to call:n);l scanf(%d,&m);l head=creat(n);l last=select(head,m);n=last-num;l printf(the last one:%dn,n);free(last);l printf(nPress any key to continue.n);l getch();return(1);llLinkList*creat(int n)l L

34、inkList*head,*s,*p;l int i;l s=(LinkList*)malloc(sizeof(LinkList);l head=s;l s-num=1;p=s;l for(i=2;inum=i;l p-next=s;p=s;l p-next=head;l return(head);llLinkList*select(LinkList*head,int m)l LinkList*p,*q;l int i,t,flag=0;l p=head;l t=1;l q=p;/*q-前趋指针前趋指针,p-当前指针当前指针*/l do l p=q-next;l t=t+1;l if(t%m=

35、0)l printf(%4dt,p-num);l if(q-next=q)flag=1;break;l q-next=p-next;l free(p);l p=q;l else q=p;l while(q=p)|(flag=0);l head=p;l return(head);l2022-12-1955试验二:栈和队列的应用试验二:栈和队列的应用l1.“停车场管理的模拟停车场管理的模拟”部分部分l问题说明问题说明 设有一个可以设有一个可以停放停放 n 辆汽车辆汽车的狭长停车场,它只有一的狭长停车场,它只有一个大门可以供车辆进出。个大门可以供车辆进出。车辆按到达停车场的时间依次从停车场车辆按到达

36、停车场的时间依次从停车场最里面向大门口处停放最里面向大门口处停放(最先到达的第一辆车放在停车场的最里(最先到达的第一辆车放在停车场的最里面)。面)。l如果停车场已放满如果停车场已放满 n 辆车,则后到达的车辆辆车,则后到达的车辆停在门外的便道上停在门外的便道上等等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。车场。l停车场内如果有某辆车要开走,在它之后进入停车场的车辆都必停车场内如果有某辆车要开走,在它之后进入停车场的车辆都必须先退出停车场,待其开出停车场后,这些车辆再依原来的次序须先退出停车场,待其开出停车场后,这些车辆

37、再依原来的次序进场。进场。l每辆车在离开停车场时,应根据在停车场内每辆车在离开停车场时,应根据在停车场内停留的时间停留的时间交纳交纳保管保管费用费用。l如果停留在如果停留在便道上的车辆便道上的车辆没有进入停车场就要离去,则允许其离没有进入停车场就要离去,则允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。去,不收停车费,并且仍然保持在便道上等待的车辆的次序。2022-12-1956l编制一程序模拟停车场的管理。编制一程序模拟停车场的管理。l基本要求基本要求 程序能输出每辆车到达后的程序能输出每辆车到达后的停车位置停车位置(停车场(停车场/便道),每辆车离开停车场时应交纳便道),每辆

38、车离开停车场时应交纳的的费用费用。2022-12-1957l数据结构描述:数据结构描述:l(1)停车场栈:停车场栈:ltypedef struct element l int num;l int arrtime;l ElemType;ltypedef struct stacktag l ElemType stackN;l int top;l STACK;2022-12-1958l(2)便道队列:便道队列:ltypedef struct nodetag l int num;l struct nodetag*next;l QUEUE;ltypedef struct queuetag l QUEUE

39、*front,*rear;l LinkedQueTp;2022-12-1959l人人机交互部分机交互部分l内容:通过屏幕提示输入数据;内容:通过屏幕提示输入数据;通过数据内容实现功能的选择;通过数据内容实现功能的选择;l要求:提示内容清晰易读,要求:提示内容清晰易读,键盘操作简单准确;键盘操作简单准确;l实现:循环扫描键盘,等待用户输入;实现:循环扫描键盘,等待用户输入;根据输入内容确定要执行的分支程序。根据输入内容确定要执行的分支程序。2022-12-1960lvoid main()l flag=True;l for(;)l if(flag=False)break;l l return;li

40、nt flag;printf(“?n);scanf(?);or:ch=getchar();switch(?)if()else 2022-12-1961lvoid main()l char ch1,ch2;l STACK*s1,*s2;l LinkedQueTp*p;l ElemType x;l int flag,t1,t2;l s1=(STACK*)malloc(sizeof(STACK);l s2=(STACK*)malloc(sizeof(STACK);l p=(LinkedQueTp*)malloc(sizeof(LinkedQueTp);l IniStack(s1);/*初始化停车场栈

41、初始化停车场栈*/l IniStack(s2);/*初始化车辆规避所栈初始化车辆规避所栈*/l IniLinkedQue(p);/*初始化便道队列初始化便道队列*/2022-12-1962lflag=True;lfor(;)l clrscr();l printf(n输入数据:输入数据:A/D,车牌号,到达时间车牌号,到达时间/离开时间离开时间n);l printf(E-退出。退出。n);l scanf(%c,%d,%d,&ch1,&t1,&t2);l x.num=t1;x.arrtime=t2;l ch2=getchar();2022-12-1963l switch(ch1)l case a:

42、l case A:Arrive(s1,p,x);l printf(nPress any key to continue.n);l getch();break;l case d:l case D:Delive(s1,s2,p,x);l printf(nPress any key to continue.n);l getch();break;2022-12-1964l case e:l case E:flag=False;l printf(n程序正常结束程序正常结束n);l break;l default:printf(“n选择错误,重新输入选择错误,重新输入n);l printf(nPress

43、any key to continue.n);l getch();break;l if(flag=False)break;l l return;l2022-12-1965l内部处理内部处理初始化栈初始化栈:void IniStack(STACK*s);进栈:进栈:int Push(STACK*s,ElemType x);出栈:出栈:ElemType Pop(STACK*s);初始化队列:初始化队列:void IniLinkedQue(LinkedQueTp*s);入队:入队:void EnLinkedQue(LinkedQueTp*s,int num1);出队:出队:int DeLinkedQ

44、ue(LinkedQueTp*s);到达处理:到达处理:void Arrive(STACK*s1,LinkedQueTp*p,ElemType x);离开处理:离开处理:void Delive(STACK*s1,STACK*s2,LinkedQueTp*p,ElemType x);2022-12-1966lvoid IniStack(STACK*s)l s-top=-1;l return;llvoid IniLinkedQue(LinkedQueTp*s)l QUEUE*p1;l s-front=(QUEUE*)malloc(sizeof(QUEUE);l s-rear=s-front;l p

45、1=s-front;l p1-num=0;l p1-next=Null;l2022-12-1967lvoid Arrive(STACK*s1,LinkedQueTp*p,ElemType x)l int f,no1,no2;l f=Push(s1,x);/*入栈:车进停车场入栈:车进停车场*/l if(f=False)/*停车场已满,车停在便道停车场已满,车停在便道*/l EnLinkedQue(p,x.num);l no1=p-front-num;l printf(第第%d号车停在便道的第号车停在便道的第%d号车位上号车位上n,x.num,no1);l else/*显示车在停车场的位置显示车

46、在停车场的位置*/l no1=s1-top+1;no2=x.num;l printf(第第%d号车停在停车场的第号车停在停车场的第%d号车位上号车位上n,no2,no1);l2022-12-1968lvoid Arrive(STACK*s1,LinkedQueTp*p,ElemType x)l int f;l f=Push(s1,x);/*入栈:车进停车场入栈:车进停车场*/l if(f=False)/*停车场已满,车停在便道停车场已满,车停在便道*/l EnLinkedQue(p,x.num);l printf(第第%d号车停在便道的第号车停在便道的第%d号车位上号车位上n,x.num,p-

47、front-num);l else/*显示车在停车场的位置显示车在停车场的位置*/l printf(第第%d号车停在停车场的第号车停在停车场的第%d号车位上号车位上n,x.num,s1-top+1);l2022-12-1969l离开处理:离开处理:已知:已知:车牌号,离开时间车牌号,离开时间处理:处理:从停车场栈中寻找车牌号;从停车场栈中寻找车牌号;循环条件:循环条件:栈不为空;栈不为空;没有找到没有找到(标志为假标志为假);注意:注意:利用一个临时栈保存每次出栈的结点元素;利用一个临时栈保存每次出栈的结点元素;出车处理:出车处理:显示停车费用,将临时栈结点数据返回到停车栈中,显示停车费用,将

48、临时栈结点数据返回到停车栈中,将便道上的一辆车出队,并将该车加入到停车栈中;将便道上的一辆车出队,并将该车加入到停车栈中;从便道队列中寻找车牌号;从便道队列中寻找车牌号;循环条件:循环条件:没有到队尾;没有找到没有到队尾;没有找到(标志为假标志为假);出车处理:出车处理:显示车辆离开信息;显示车辆离开信息;错误处理:错误处理:在停车场栈和便道队列中都没有找到给定车牌号。在停车场栈和便道队列中都没有找到给定车牌号。2022-12-1970lvoid Delive(STACK*s1,STACK*s2,LinkedQueTp*p,ElemType x)l int n,f=False;l ElemTy

49、pe y;l QUEUE*q;l while(s1-top-1)&(f!=True)l y=Pop(s1);l if(y.num!=x.num)n=Push(s2,y);l elsef=True;函数调用应注意的问题:函数调用应注意的问题:1.函数的功能;函数的功能;2.函数需要的参数;函数需要的参数;3.函数返回结果。函数返回结果。2022-12-1971l if(y.num=x.num)l printf(第第%d号车应收费号车应收费%d元元,y.num,(x.arrtime-y.arrtime)*M);l while(s2-top-1)l y=Pop(s2);f=Push(s1,y);l

50、n=DeLinkedQue(p);l if(n!=Null)l y.num=n;y.arrtime=x.arrtime;l f=Push(s1,y);l printf(“第第%d号车停在停车场第号车停在停车场第%d号车位上号车位上l n,y.num,s1-top+1);l 2022-12-1972l else l while(s2-top-1)l y=Pop(s2);f=Push(s1,y);l q=p-front;f=False;l while(f=False&q-next!=Null)l if(q-next-num!=x.num)q=q-next;l else l q-next=q-nex

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(北京工业大学-计算机软件基础考试习题课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|