全部科目 > 程序员 >
2015年上半年 上午试卷 综合知识
第 34 题
知识点 队列   打印机   数据结构  
关键词 打印机   缓冲区   数据缓冲   数据结构   数据  
章/节 常用数据结构  
 
 
在解决计算机与打印机之间速度不匹配的问题时,通常设置一个打印数据缓冲区, 计算机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓沖区取出数据。因此, 该缓冲区的数据结构应该是(34)。
 
  A.  树
 
  B.  图
 
  C.  栈
 
  D.  队列
 
 




 
 
相关试题     队列、栈 

  第36题    2010年上半年  
已知栈S初始为空,对于一个符号序列a1、a2、a3、a4、a5(入栈次序也是该次序),当用I表示入栈、0表示出栈,则通过栈S得到符号序列a2、a4、a5、a3、a1的操作序列为(36)

  第36题    2016年上半年  
队列采用如下图所示的循环单链表表示,图(a)表示队列为空,图(b)为e1、e2、e3依次入队列后的状态,其中,rear指针指向队尾元素所在结点,size为队列长度。以下叙述中,正确的是(36)。

  第37题    2014年下半年  
对于一个初始为空的栈,其入栈序列为abc时,其出栈序列可以有(37)种。

 
知识点讲解
· 队列
· 打印机
· 数据结构
 
        队列
               队列的定义
               队列(queue)是一种只允许在一端进行插入,而在另一端进行删除的线性表,是一种操作受限的线性表。在表中只允许进行插入的一端称为队尾(rear),只允许进行删除的一端称为队头(front)。队列的插入操作通常称为入队列或进队列,而队列的删除操作则称为出队列或退队列。当队列中无数据元素时,称为空队列。
               由队列的定义可知,队头元素总是最先进队列的,也总是最先出队列;队尾元素总是最后进队列,因而也是最后出队列。这种表是按照先进先出(First In First Out, FIFO)的原则组织数据的,因此,队列也被称为"先进先出"表。
               下图是一个队列的进出示意图,通常用指针front指示队头的位置,用指针rear指向队尾的位置。
               
               队列的进出示意图
               队列的基本操作
               队列的基本操作主要有以下6种。
               .InitQueue(&Q):初始化操作,构造一个队列Q。
               .QueueEmpty(Q):若栈Q为空队列,返回1,否则返回0。
               .EQueue(&Q, e):插入元素e到队列Q的尾部。
               .OQueue(&Q,&e):删除Q的队首元素,并用e返回其值。
               .GetQhead(Q,&e):用e返回Q的队首元素。
               .ClearQueue(&Q):将Q清空为空队。
               队列的顺序存储结构
               顺序存储结构采用一维数组(向量)实现,设队列头指针front和队列尾指针rear,并且假设front指向队头元素的前一位置,rear指向队尾元素。若不考虑队满,则入队操作语句为Q[rear++]=x;若不考虑队空,则出队操作语句为x=Q[++front]。当然,出队时,并不一定需要队头元素(与退栈类似)。
               按上述的做法,有可能出现假溢出,即队尾已到达一维数组的高端,不能再入队,但因为连续出队,队列中元素个数并未达到最大值。解决这种问题,可用循环队列。在循环队列中,需要区分队空和队满:仍用front=rear表示队列空,在牺牲一个单元的前提下,用front==(rear+1)% MAX表示队列满。在这种约定下,入队操作的语句为:rear=(rear+1)%MAX, MAX, Q[rear]=x;出队操作语句为:front=(front+1)% MAX。
               顺序队列的类型定义如下:
               
               顺序队列定义为一个结构类型,该类型变量有3个数据域:data、front、rear。其中data为存储队中元素的一维数组。队头指针front和队尾指针rear定义为整型变量,取值范围是0~QueueSize-1。约定队尾指针指示队尾元素在一维数组中的当前位置,队头指针指示队头元素在一维数组中的当前位置的前一个位置,这种顺序队列说明如下。
               .初始化时,设置SQ.front=SQ.rear=0。
               .队头指针的引用为SQ.front,队尾指针的引用为SQ.rear。
               .队空的条件为SQ.front==SQ.rear;队满的条件为SQ.front=(SQ.rear+1)% QueueSize。
               .入队操作:在队列未满时,队尾指针先加1(要取模),再送值到队尾指针指向的空闲元素。出队操作:在队列非空时,队头指针先加1(要取模),再从队头指针指向的队头元素处取值。
               .队列长度为(SQ.rear+QueueSize-SQ.front)% QueueSize。
               特别应注意的是:在循环队列的操作中队头指针、队尾指针加1时,都要取模,以保持其值不出界。
               在循环队列上队列的实现基本操作的函数如下。
               1)初始化initqueue(SQueue *SQ)
               
               2)判空QueueEmpty(SQueue SQ)
               
               3)入队EQueue(SQueue *SQ, ElemType e)
               
               4)出队OQueue(SQueue *SQ, ElemType *e)
               
               5)取队首元素GetQhead(SQueue *SQ, ElemType *e)
               
               6)清队列ClearQueue(SQueue *SQ)
               
               队列的链式存储结构
               队列的链接实现称为链队,链队实际上是一个同时带有头指针和尾指针的单链表。头指针指向队头节点,尾指针指向队尾节点即单链表的最后一个节点。为了简便,链队设计成一个带头节点的单链表。
               链队的类型定义如下:
               
               链队列的说明如下。
               .队列以链表形式出现,链首节点为队头,链尾节点为队尾。
               .队头指针为LQ→front,队尾指针为LQ→rear,队头元素的引用为Q→front→data,队尾元素的引用为LQ→rear→data。
               .初始化时,设置LQ→front=LQ→rear=NULL。
               .进队操作与链表中链尾插入操作一样;出队操作与链表中链首删除操作一样。
               .队空的条件为LQ→front==NULL。理论上,只要系统内存足够大,链队是不会满的。
               在链队上实现队列基本操作的函数如下。
               1)队列初始化InitQueue(LQueue *LQ)
               
               2)入队EQueue(LQueue *LQ, ElemType e)
               
               3)出队OQueue(LQueue *LQ, ElemType *e)
               
               4)判空QueueEmpty(LQueue *LQ)
               
               5)取队首元素GetQhead(LQueue *LQ, ElemType *e)
               
               6)清队列ClearQueue(LQueue *LQ)
               
               循环队列中的边界条件判别准则
               判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一个布尔变量来区别队列的空和满;二是少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满;三是设置一个计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。
               双端队列的作用
               双端队列是限定插入和删除操作在线性表的两端进行,可将其看成是栈底连在一起的两个栈,但其与两个栈共享存储空间是不同的。共享存储空间中的两个栈的栈顶指针是向两端扩展的,因而每个栈只需一个指针;而双端队列允许两端进行插入和删除元素,因而每个端点必须设立两个指针,如下图所示。
               
               双端队列的示意图
               在实际应用中,可对双端队列的输出进行限制(即一个端点允许插入和删除,另一个端点只允许插入),也可对双端队列的输入进行限制(即一个端点允许插入和删除,另一个端点只允许删除)。可见,采用双端队列可增加应用中的灵活性。
 
        打印机
        打印机是计算机系统中常用的设备之一。打印机在计算机系统中是可选件。利用打印机可以打印出各种资料、文书、图形和图像等。根据打印机的工作原理,可以将打印机分为激光打印机、喷墨打印机和针式打印机三类,如下图所示。
        
        常见打印机
        激光打印机是一种高速度、高精度、低噪音的非击打式打印机,它是激光扫描技术与电子照相技术相结合的产物。激光打印机具有最高的打印质量和最快的打印速度,可以输出漂亮的文稿,也可以输出直接用于印刷制版的透明胶片。
        喷墨打印机的打印头由几百个细小的喷墨口组成,当打印头横向移动时,喷墨口可以按一定的方式喷射出墨水,打到打印纸上,形成字符、图形等。其主要优点是打印精度高、噪声较低、价格较便宜。主要缺点是打印速度慢、墨水消耗较大、日常费用较高。
        针式打印机利用打印头内的点阵撞针撞击打印色带,在打印纸上产生打印效果,常用的点阵打印机为24针行式打印机。该打印机的主要优点是价格便宜、轻便实用、维护费用低,适合于打印宽幅纸,且便于多份拷贝,还可以打印多联的超长度打印纸。主要缺点是打印速度慢、噪声大,打印质量也差。
 
        数据结构
        根据数据元素之间关系的不同特性,通常有下列4类基本的逻辑结构,即集合结构、线性结构、树形结构、图形结构。
        1)线性结构
        线性表是最常用且最简单的一种数据结构。线性表中除第一个元素外,每个元素均只有一个直接前驱;除最后一个元素外,每个元素都只有一个直接后继。
        栈是限定仅在表尾进行插入或删除操作的线性表,是只能通过访问它的一端来实现数据存储和检索的一种线性数据结构。
        队列是一种先进先出(FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。
        2)树
        树是nn≥0)个互不相交的有限集,当n=0时称为空树。在一棵非空树中,有且仅有一个节点称为根节点;当n>1时,其余的节点可分为若干个不相交的集合,其中每一个集合本身又是一棵树,这些集合称为根节点的子树。
        3)图
        图是由两个集合VE组成的二元组,记为G=(V, E),其中V是顶点的非空有限集合,E是图中边的有限集合。



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2023 All Rights Reserved
软考在线版权所有