1、数据结构队列数据结构队列数据结构队列4 4)元素按)元素按a a1 1,a,a2,2,a a3,3,.,a.,an n 顺序入队,第一个入队的元素为顺序入队,第一个入队的元素为a a1 1,最后一个入队的,最后一个入队的 元素是元素是a an n,第一个出队的元素为,第一个出队的元素为a a1 1;说说 明:明:1 1)表尾称作队尾,表头称为队头;)表尾称作队尾,表头称为队头;2 2)a a1 1为队头元素,为队头元素,a an n为队尾元素;为队尾元素;3 3)在表尾插入元素操作,称为入队操作;在表头删除元素的操作,称为出队操作;)在表尾插入元素操作,称为入队操作;在表头删除元素的操作,称为
2、出队操作;5 5)队列具有先进先出的特点,又称为先进先出表(队列具有先进先出的特点,又称为先进先出表(FIFOFIFO表)。表)。入队列入队列 a a1 1 a a2 2 a a3 3 a an n队队头头队队尾尾出队列出队列自测题自测题1 1一个队列的入列序列是一个队列的入列序列是1,2,3,4,则队列的输出序列是(,则队列的输出序列是()。)。A.4,3,2,1 B.1,2,3,4 C.1,4,3,2 D.3,2,4,1二、二、队列的抽象数据类型的定义队列的抽象数据类型的定义InitQueue(&Q)结果结果:构造一个空队列构造一个空队列 Q。数据对象数据对象:D=ai|ai ElemSe
3、t,i=1,2,n 数据关系数据关系:R1=;约定;约定a1为队头元素,为队头元素,an为队尾元素。为队尾元素。基本操作基本操作:ADT Queue ADT Queue DestroyQueue(&Q)结果结果:销毁队列销毁队列 Q。条件条件:队列队列 Q 已存在。已存在。功能:若队列不空,则删除功能:若队列不空,则删除Q Q的队头元素,用的队头元素,用e e返回其值,并返回返回其值,并返回OKOK;否则,返回否则,返回ERRORERROR。队列的基本操作:队列的基本操作:1 1)初始化操作)初始化操作InitQueue(&Q)InitQueue(&Q)功能:构造一个空队列功能:构造一个空队列
4、Q Q;2 2)销毁操作销毁操作DestroyQueue(&Q)DestroyQueue(&Q)功能:销毁已存在队列功能:销毁已存在队列Q Q;3 3)置空操作置空操作ClearQueue(&Q)ClearQueue(&Q)功能:功能:将队列将队列Q Q置为空队列;置为空队列;4 4)判空操作)判空操作QueueEmpty(Q)QueueEmpty(Q)功能:若队列功能:若队列Q Q为空,则返回为空,则返回TrueTrue;否则,返回;否则,返回FalseFalse;5 5)取队头元素操作取队头元素操作GetHead(Q,&e)GetHead(Q,&e)功能:取队头元素,并用功能:取队头元素,
5、并用e e返回;返回;6 6)入队操作入队操作EnQueue(&Q,e)EnQueue(&Q,e)功能:将元素功能:将元素e e插入插入Q Q的队尾;的队尾;7 7)出队操作)出队操作DeQueue(&Q,&e)DeQueue(&Q,&e)在队列的顺序存储结构中,用一组连续存储单元依次存储从队头到队尾的数据在队列的顺序存储结构中,用一组连续存储单元依次存储从队头到队尾的数据元素元素.此外,还需附加两个变量:此外,还需附加两个变量:队头指针队头指针frontfront:指示队头元素的位置;:指示队头元素的位置;队尾指针队尾指针rearrear:指示队尾元素的位置。:指示队尾元素的位置。J1J1J
6、2J2J3J3J3J3J5J5J6J6问题:问题:如何解决如何解决“假上溢假上溢”现象现象?J6J6J4J4J5J53 13 12 24 04 05 5J6J6J5J5J4J4l循环队列操作示意图循环队列操作示意图5 54 04 03 13 12 2J5J5J4J4J3J35 54 04 03 13 12 2J5J5J6J6J7J7J8J8J3J3J4J45 54 04 03 13 12 2J3J3J4J4J5J5如何判断循环队列如何判断循环队列队空、队满?队空、队满?5 54 04 03 13 12 2J5J5J6J6J7J7J3J3J4J4自测题自测题2 2循环队列的优点是什么,如何判断循
7、环队列的优点是什么,如何判断“空空”和和“满满”。【解答解答】循环队列解决了常规用循环队列解决了常规用0-m-10-m-1的数组表示队列时出现的的数组表示队列时出现的“假溢出假溢出”(即队列未满但不能入队)。在循环队列中,我们仍用队头指针等于队尾指针(即队列未满但不能入队)。在循环队列中,我们仍用队头指针等于队尾指针表示队空,而用牺牲一个单元的办法表示队满:即当队尾指针加表示队空,而用牺牲一个单元的办法表示队满:即当队尾指针加1 1(取模)等于(取模)等于队头指针时,表示队列满。也有使用全部单元,通过设标记来解决队头指针时,表示队列满。也有使用全部单元,通过设标记来解决“空空”和和“满满”的。
8、的。彼得圣吉在第五项修炼一书中提出的“第五项修炼”理论:第一,要求员工能够达到自我超越,只有精通“自我超越”的人,才能够不断实现他们内心深处最想实现的愿望;第二,要改变每个员工的思维模式;第三,要建立共识,努力改善团队的服务精神。此外,还包括国际学习和国际思考。22 争端的解决一、设备与构筑物档案【自检】8.3 所有备品备件应注明有关说明。2、推荐优秀青年知识分子上科技、经营、管理一线重要岗位;需要强调的是,要改变如此大型的机构,使之向现代化服务转变并不是件容易的事情。人人都有惯性和惰性,要想改善公司服务的品质,使它符合现代化的顾客需求,在培训过程中就必须牢记最重要的原则,那就是改变惯性和惰性
9、。2策略规划优秀的人才是改善企业服务,真正落实各项制度和机制的保证。如何培训优秀的服务人才,可以按照图32所示的几个步骤进行推行:首先从总公司和分公司来甄选理想的服务人才,作为种子师资加以培训,设定教材和课程,定期举办服务技术培训;然后这些种子师资回到他们的具体岗位,落实培训的服务技能,并变成一种运动来加以推行。23.3 履约保证金采用下列方式提交:做为小型咨询活动的产品推广点;19.4 在招标文件第六章规定了“合同通用条款”,投标人在投标时应对此给予充分的考虑。并按照招标文件第二章中“合同通用条款前附表”中的内容填写“商务条款响应、偏离表”。只是称为指针,实现时只是称为指针,实现时不一定用指
10、针变量不一定用指针变量5 54 04 03 13 12 2参数:参数:Q Q是存放队列的结构变量;是存放队列的结构变量;功能:建一个空队列功能:建一个空队列Q Q。5 54 04 03 13 12 25 54 04 03 13 12 2参数:参数:Q Q是存放队列的结构变量;是存放队列的结构变量;功能:计算队列的长度。功能:计算队列的长度。5 54 04 03 13 12 2J5J5J6J6J7J7J3J3J4J43 3)修改队尾指针,使队尾指针指向队尾元素的下一个位置。)修改队尾指针,使队尾指针指向队尾元素的下一个位置。5 54 04 03 13 12 2J1J1J3J3J2J25 54 0
11、4 03 13 12 2J1J1J3J3J2J2e e功能:将元素功能:将元素e e插入队尾。插入队尾。主要步骤:主要步骤:1 1)Q Q是否已满,是否已满,若满,返回若满,返回ERRORERROR;否则转否则转2 2););2 2)将元素将元素e e写入队尾;写入队尾;自测题自测题3 3循环队列存储在数组循环队列存储在数组A0.m中,则入队时的操作为(中,则入队时的操作为()。)。A.rear=rear+1 B.rear=(rear+1)mod(m-1)C.rear=(rear+1)mod m D.rear=(rear+1)mod(m+1)5 54 04 03 13 12 2J1J1J3J3
12、J2J25 54 04 03 13 12 2J1J1J3J3J2J2J1J1为便于操作,一个链队列需要分别指示队头队头和队尾队尾的两个指针。J1J1 J2 J2 头结点头结点链队列的链队列的表头结点表头结点Q.front=Q.rear/将头尾指针封装在一起的链队将头尾指针封装在一起的链队J1J1 J2 J2 市场部监察人员要根据对各中心药店检查情况,对各县区负责人有款不回现象,及时汇报给市场部及财务部,严肃处理。(6)不同投标人的投标保证金从同一单位或者个人的账户转出。速拓公司的成长与发展离不开您的支持,我们会时刻注意与您进行沟通,不断听取更多的宝贵意见,不断推出高品质的产品和服务。的第一价值
13、观就是顾客至上,让顾客满意,这是企业生存、发展、有序经营的基础。接下来才是管理纪律要严格,强调品质标准等等。勇敢的冒险精神,是企业创新能力的保证。有了人才,还要提供良好的工作环境,大家才会满意。最后一条是注重结果,公司重视结果管理,让个人自由发挥自己的创意,公司只关注结果,这就是绩效管理。8.4 对内报表管理制度4 开展管理评审【本讲小结】5.2.4 生产、质量、统计主管部门按选定认可的统计方法进行控制和统计分析,并评审其有效性与适用性;(12)不同投标人的投标文件出现了评标委员会认为不应当雷同的情况。15.2 投标分项价格表填写时应注意下列要求:服务人员应该从头做起,从心开始,展现出容貌、气
14、质、谈吐、服饰、反应、姿态、精神面貌等多方面的美姿美仪,还应动静结合,注意走姿、手势以及手部修饰与保养等方面的礼仪和技巧(12)本项目不接受联合体。J1 J2 J1 J2 J1J1e eJ1J1J1J1e eJ1J1zhoujin0 xin SQ.frontQ.rear pe=p-data=zhou pe=p-data=jin pe=p-data=xinQ.rear04、离开队列、离开队列 注意!注意!J1 J2 自测题自测题4 4用链接方式存储的队列,在进行删除运算时(用链接方式存储的队列,在进行删除运算时()。)。A.仅修改头指针仅修改头指针 B.仅修改尾指针仅修改尾指针 C.头、尾指针都
15、要修改头、尾指针都要修改 D.头、尾指针可能都要修改头、尾指针可能都要修改算法设计题算法设计题1 1l假设以带头结点的循环链表表示队列,并且只设一个指针指向队假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,不设头指针,试设计相应的入队列和出队列的算法尾结点,不设头指针,试设计相应的入队列和出队列的算法 。Tail队头队头队尾队尾typedef struct LqueueElemType data;struct Lqueue*next;Lqueue,*Queueptr;void QueueIn(Queueptr rear,ElemType x)/入队列入队列 s=(Queuept
16、r)malloc(sizeof(LQueue);s-data=x;s-next=rear-next;/元素插入队尾元素插入队尾 rear-next=s;rear=s;/求得新的队尾求得新的队尾 Tail队头队头队尾队尾typedef struct LqueueElemType data;struct Lqueue*next;Lqueue,*Queueptr;Tail队头队头队尾队尾ElemType QueueOut(Queueptr rear)/出队列出队列if(rear-next-next=rear)printf(队列为空队列为空);else p=rear-next;q=p-next;p-n
17、ext=q-next;x=q-data;if(q=rear)rear=p;free(q);/删除队头元素删除队头元素 return(x);/else 算法设计题算法设计题2 2l要求完全利用循环队列中的元素空间,设置一个标志域要求完全利用循环队列中的元素空间,设置一个标志域tagtag,并,并以以tagtag的值是的值是0 0或来区分尾指针和头指针相同时的队列状态是或来区分尾指针和头指针相同时的队列状态是“空空”还是还是“不空不空”。请编写与此结构相对应的入队和出队的算法。请编写与此结构相对应的入队和出队的算法。类型定义:类型定义:typedef struct ElemType datam;i
18、nt rear,front;/队尾和队头指针队尾和队头指针 int tag;/标记标记,0为空为空,1为非空为非空 CycQueue;1、货、款监控6.1 生产方面的统计方法关于通用性的生产、消耗等指标,执行国家颁布的统计方法,以确保指标的可比性、统一性。主要过程生产能力方面的统计方法按国家统一标准执行。植根式服务文化及技术概述(一)成交候选供应商存在违法、违纪行为的;1.7加气站员工必须持操作证,穿戴劳动保护服装上岗。坚持岗位练兵制度,积极参加各项安全生产活动,主动向领导或有关部门提出合理化建议和意见。5.4充装前必须仔细检查CNG汽车的气路部位是否有漏气、松动和锈蚀严重等情况,观察仪表是否
19、误差偏大或损坏,发现问题必须整改后再充装,严禁超限量充装,带故障充装。此外,差异优势可以实行行为区隔,提供贴心服务,还可以充分考虑自然资源和环境来深化服务优势,例如太湖周边的企业可以充分利用太湖的星级酒店,深化服务优势,使大客户满意。提供化服务,能够简化流程,提供大量信息,速度也加快。美容业还可以利用年轻行业有活力有朝气的特点,创造品味独特的优势。3.5 当班调度有权根据品质要求对原燃材料、半成品、成品库存进行调配,对公司的物流流量负责,对生产物料平衡负责。8.3竞争性磋商响应人递交的响应文件为一式柒份,其中正本壹份,副本陆份。响应文件统一使用A4幅面的纸张印制,必须胶装成册并编码,其他方式装
20、订的响应文件一概不予接受。几年前,王先生作为培训师到深圳一家酒店为他们的员工进行服务技能培训。王先生与员工经过一段时间的接触后,他将这些女员工带到十字路口,让员工对着过路行人喊话:“您好,我们是酒店,欢迎光临”、“您好,请问您需要什么服务吗?”等等,现场气氛十分热烈。人们在改变惯性的时候会觉得不舒服和不习惯,潜意识会不由自主地回到从前。如何来克服这种情况呢?例如,藤本身具有很强的弹性,在制作藤椅的过程中,需要用火烘烤藤,使之慢慢变形,在压力的作用下,藤才会真正变成所期望的形状。l只设标志的循环队列的入队只设标志的循环队列的入队void QueueIn(CycQueue cq,ElemType
21、x)if(cq.tag=1&cq.front=cq.rear)printf(“队满队满n”);exit(0);else cq.rear=(cq.rear+1)%m;cq.datacq.rear=x;if(cq.tag=0)cq.tag=1;/由空由空变变不空不空标记标记 /else l只设标志的循环队列的出队只设标志的循环队列的出队void QueueOut(CycQueue cq);if(cq.tag=0)printf(“队空队空n”);exit(0);else cq.front=(cq.front+1)%m;if(cq.front=cq.rear)cq.tag=0;/队列由不空变空队列由不
22、空变空 /else 算法设计算法设计3 3 用栈模拟队列用栈模拟队列u请利用两个栈请利用两个栈S1和和S2来模拟一个队列。来模拟一个队列。u已知栈的三个运算定义如下:已知栈的三个运算定义如下:PUSH(ST,x):元素元素x入入ST栈;栈;POP(ST,x):ST栈顶元素出栈,赋给变量栈顶元素出栈,赋给变量x;Sempty(ST):判:判ST栈是否为空。栈是否为空。u那么如何利用栈的运算来实现该队列的三个运算:那么如何利用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列;插入一个元素入队列;dequeue:删除一个元素出队列;删除一个元素出队列;queue_empty:判队列
23、为空。:判队列为空。u【上海交通大学上海交通大学1999 二二(12分分)】【】【厦门大学厦门大学2005 六六(15分分)】l栈模拟队列栈模拟队列入队入队int top1;top1是栈是栈s1的栈顶指针,是全局变量的栈顶指针,是全局变量int enqueue(stack s1,ElemType x)用入栈模拟入队用入栈模拟入队if(top1=n&!Sempty(s2)printf(“栈满栈满”);return(0);s1满满s2非空非空,这时这时s1不能再入栈不能再入栈 if(top1=n&Sempty(s2)s2空,将空,将s1退栈退栈,再压栈到再压栈到s2 while(!Sempty(s
24、1)POP(s1,x);PUSH(s2,x);push(s1,x);return(1);x入栈,实现了队列元素的入队入栈,实现了队列元素的入队 l栈模拟队列栈模拟队列出队出队void dequeue(stack s2,s1)s2是输出栈,将是输出栈,将s2栈顶元素退栈,实现队列元素的出队栈顶元素退栈,实现队列元素的出队if(!Sempty(s2)栈栈s2不空,则直接出队不空,则直接出队 POP(s2,x);printf(“出队元素为出队元素为”,x);else if(Sempty(s1)处理处理s2空栈空栈 printf(“队列空队列空”);exit(0);若输入栈也空,则队空若输入栈也空,则
25、队空 else 先将栈先将栈s1倒入倒入s2中,再出队中,再出队 while(!Sempty(s1)POP(s1,x);PUSH(s2,x);POP(s2,x);s2退栈相当队列出队退栈相当队列出队 printf(“出队元素出队元素”,x);结束算法结束算法dequuel栈模拟队列栈模拟队列判空判空int queue_empty()本算法判用栈本算法判用栈s1和和s2模拟的队列是否为空模拟的队列是否为空if(Sempty(s1)&Sempty(s2)return(1);队列空队列空 else return(0);队列不空队列不空自测题自测题5 5为解决计算机主机与打印机之间速度不匹配问题,通常
26、设置一个打印数据缓冲区为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是。该缓冲区的逻辑结构应该是A.A.栈栈 B.B.队列队列 C.C.树树 D.D.图图【20092009年全国硕士研究生入学计算机学科专业基础综合试题年全国硕士研究生入学计算机学科专业基础综合试题】设栈设栈S和队列和队列Q的初始状态均为空,元素的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈依次进入栈S。若每个元素出栈后立即进入队
27、列若每个元素出栈后立即进入队列Q,且,且7个元素出队的顺序是个元素出队的顺序是b,d,c,f,e,a,g,则栈,则栈S的容量至少是的容量至少是A.1 B.2 C.3 D.4【2009年全国硕士研究生入学计算机学科专业基础综合试题年全国硕士研究生入学计算机学科专业基础综合试题】自测题自测题6 6练习题练习题1.1.写出以下程序段的输出结果(队列中的元素类型写出以下程序段的输出结果(队列中的元素类型QElemType QElemType 为为charchar)。)。void main()void main()Queue Q;InitQueue(Q);Queue Q;InitQueue(Q);cha
28、r x=char x=e e,y=,y=c c;EnQueue(Q,EnQueue(Q,h h);EnQueue(Q,);EnQueue(Q,r r);EnQueue(Q,y););EnQueue(Q,y);DeQueue(Q,x);EnQueue(Q,x);DeQueue(Q,x);EnQueue(Q,x);DeQueue(Q,x);EnQueue(Q,DeQueue(Q,x);EnQueue(Q,a a););while(!QueueEmpty(Q)DeQueue(Q,y);printf(y);DeQueue(Q,y);printf(y);printf(x);charchar2.2.简述一
29、下算法的功能(栈和队列中的元素类型均为简述一下算法的功能(栈和队列中的元素类型均为intint)。)。void algo3(Queue&Q)void algo3(Queue&Q)Stack S;int d;Stack S;int d;InitStack(S);InitStack(S);while(!QueueEmpty(Q)while(!QueueEmpty(Q)DeQueue(Q,d);Push(S,d);DeQueue(Q,d);Push(S,d);while(!StackEmpty(S)Pop(S,d);EnQueue(Q,d);Pop(S,d);EnQueue(Q,d);借助于栈借助于栈S S将队列将队列Q Q中的元素逆置。中的元素逆置。