- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
存储结构现在交换队头和队尾的位置,选择A[m-1]是队头,那么A[0]是队尾入队时,队列中原有的m个元素均需后移一个位置,腾出A[0]的位置放置新元素此时入队操作的时间开销将为O(m)存储结构可以使用变量front指示队头位置,使用变量rear指示队尾位置称front为队头指针,rear为队尾指针表示的是数组下标通常,front指示的是队头元素所在的位置,rear指示的是队尾元素后面的空位置按照惯例,还是将第一个入队的元素保存在数组下标0的位置入队的新元素放置到所有元素的后面经过若干次入队、出队操作后,含m个元素的队列的示意图如下所示,其中阴影部分表示队列中的元素实际占用的数组单元??a0…am-1????↑front??↑rear?当再进行若干次入队操作后,rear会到达数组的末尾,即最后一个下标位置。之后再进行入队操作时,导致数组下标越界。但数组的前半段可能会因出队操作而有空闲的单元???x…y????↑front??↑rear可以重复利用数组中前面的空闲单元保存后续入队的元素…v?……u…??↑rear??↑front?例3-8设队列保存在最大容量为7的数组A中,从空队列开始,依次执行下列各步操作,分别画出得到的队列示意图依次将5,12,9,37入队列将5,12依次出队列,并依次将25,8入队列将16入队列,再将9出队列,再将7,4入队列循环队列顺序队列都实现为循环队列在循环队列中,入队操作会涉及到队尾rear值的变化,rear=(rear+1)%n,出队操作会涉及到队头front值的变化,front=(front+1)%n,其中n是数组的大小可以把这个数组想象成一个首尾相接的圆环,A[n-1]的后面是A[0]“循环”一词的含义正是如此空与满数组满时,rear==front条件rear==front也代表空队列解决方法:让数组中始终剩余至少一个空位置。当数组中仅有一个空位置时,就认为已经达到队列的最大长度了,队列已满初始时,front=0且rear=0例3-9已知循环队列存储在一维数组A[0..n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是()A.0,0B.0,n-1C.n-1,0D.n-1,n-1答案是B循环队列的定义typedefintELEMType;typedefstruct{ ELEMTypeelement[maxSize]; intfront,rear;}SeqQueue;循环队列初始化构造一个空队列,队头和队尾指针均赋初值0清空队列队列置空也得到一个空队列,可以将队头和队尾指针均赋值0,和初始化队列的结果一样也可以让队头和队尾指针的值相等,表示是一个空队列判空与判满队列为空的条件是rear==front队列为满的条件是(rear+1)%n==front求队列长度入队与出队链式队列链式队列采用带头指针及尾指针的单链表作为队列的存储结构单链表的头指针可以当作队头指针front,尾指针可以当作队尾指针rear链式队列的定义typedefintELEMType;typedefstructnode{ //链式队列中结点 ELEMTypedata; structnode*next;}LinkQueueNode;typedefstruct{ //链式队列 LinkQueueNode*front,*rear; //队头指针、队尾指针}LinkQueue;初始化、清空队列判空循环队列中,当队头指针和队尾指针相等时,队列为空空链式队列中,队头指针和队尾指针都为NULL在内存足够大的情况下,链式队列通常不会满入队列出队例3-10若使用不带头结点的单链表存储队列,则进行入队列操作时()。A.仅需要修改队头指针,不需要修改队尾指针B.仅需要修改队尾指针,不需要修改队头指针C.队尾指针一定要修改,队头指针也一定要修改D.队尾指针一定要修改,队头指针可能要修改答案为D采用链式方式实现队列时,也可以配合使用一个空闲单元链表,使得入队、出队时尽量少地调用malloc函数及free函数在链式队列中,可以将这两个链表合在一起,形成一个圆环,即使用一个循环链表来表示链式队列及对应的空闲单元链表。在这个循环链表中,结点分为两部分,一部分结点用来保存实际数据,另一部分结点是空闲结点带空闲单元链表的链式队列初始状态
文档评论(0)