双端队列 C (顺序存储结构)_百度文库.
C语言中都有哪些常见的数据结构你都知道几个?

C语⾔中都有哪些常见的数据结构你都知道⼏个?上次在⾯试时被⾯试官问到学了哪些数据结构,那时简单答了栈、队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了⼀下⼏种常见的数据结构,原来我们学过的数据结构有这么多~⾸先,先来回顾下C语⾔中常见的基本数据类型吧O(∩_∩)OC语⾔的基本数据类型有:整型int,浮点型float,字符型char等等添加描述那么,究竟什么是数据结构呢?数据结构是计算机存储、组织数据的⽅式。
数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合⼤部分数据结构的实现都需要借助C语⾔中的指针和结构体类型下⾯,进⼊今天的重点啦O(∩_∩)O⼏种常见的数据结构(1)线性数据结构:元素之间⼀般存在元素之间存在⼀对⼀关系,是最常⽤的⼀类数据结构,典型的有:数组、栈、队列和线性表(2)树形结构:结点间具有层次关系,每⼀层的⼀个结点能且只能和上⼀层的⼀个结点相关,但同时可以和下⼀层的多个结点相关,称为“⼀对多”关系,常见类型有:树、堆(3)图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系下⾯分别对这⼏种数据结构做⼀个简单介绍:1、线性数据结构:典型的有:数组、栈、队列和线性表(1)数组和链表a、数组:存放着⼀组相同类型的数据,需要预先指定数组的长度,有⼀维数组、⼆维数组、多维数组等b、链表:链表是C语⾔中⼀种应⽤⼴泛的结构,它采⽤动态分配内存的形式实现,⽤⼀组任意的存储单元存放数据元素链表的,⼀般为每个元素增设指针域,⽤来指向后继元素c、数组和链表的区别:从逻辑结构来看:数组必须事先定义固定的长度,不能适应数据动态地增减的情况;链表动态地进⾏存储分配,可以适应数据动态地增减的情况,且可以⽅便地插⼊、删除数据项(数组中插⼊、删除数据项时,需要移动其它数据项)从内存存储来看:(静态)数组从栈中分配空间(⽤NEW创建的在堆中), 对于程序员⽅便快速,但是⾃由度⼩;链表从堆中分配空间, ⾃由度⼤但是申请管理⽐较⿇烦从访问⽅式来看:数组在内存中是连续存储的,因此,可以利⽤下标索引进⾏随机访问;链表是链式存储结构,在访问元素的时候只能通过线性的⽅式由前到后顺序访问,所以访问效率⽐数组要低(2)栈、队列和线性表:可采⽤顺序存储和链式存储的⽅法进⾏存储顺序存储:借助数据元素在存储空间中的相对位置来表⽰元素之间的逻辑关系链式存储:借助表⽰数据元素存储地址的指针表⽰元素之间的逻辑关系a、栈:只允许在序列末端进⾏操作,栈的操作只能在栈顶进⾏,⼀般栈⼜被称为后进先出或先进后出的线性结构顺序栈:采⽤顺序存储结构的栈称为顺序栈,即需要⽤⼀⽚地址连续的空间来存储栈的元素,顺序栈的类型定义如下:添加描述链栈:采⽤链式存储结构的栈称为链栈:添加描述b、队列:只允许在序列两端进⾏操作,⼀般队列也被称为先进先出的线性结构循环队列:采⽤顺序存储结构的队列,需要按队列可能的最⼤长度分配存储空空,其类型定义如下:添加描述 链队列:采⽤链式存储结构的队列称为链队列,⼀般需要设置头尾指针只是链表的头尾结点:添加描述c、线性表:允许在序列任意位置进⾏操作,线性表的操作位置不受限制,线性表的操作⼗分灵活,常⽤操作包括在任意位置插⼊和删除,以及查询和修改任意位置的元素顺序表:采⽤顺序存储结构表⽰的线性表称为顺序表,⽤⼀组地址连续的存储单元⼀次存放线性表的数据元素,即以存储位置相邻表⽰位序相继的两个元素之间的前驱和后继关系,为了避免移动元素,⼀般在顺序表的接⼝定义中只考虑在表尾插⼊和删除元素,如此实现的顺序表也可称为栈表:添加描述线性表:⼀般包括单链表、双向链表、循环链表和双向循环链表单链表:添加描述 双向链表:添加描述线性表两种存储结构的⽐较:顺序表: 优点:在顺序表中,逻辑中相邻的两个元素在物理位置上也相邻,查找⽐较⽅便,存取任⼀元素的时间复杂度都为O(1) 缺点:不适合在任意位置插⼊、删除元素,因为需要移动元素,平均时间复杂度为O(n)链表: 优点:在链接的任意位置插⼊或删除元素只需修改相应指针,不需要移动元素;按需动态分配,不需要按最⼤需求预先分配⼀块连续空空 缺点:查找不⽅便,查找某⼀元素需要从头指针出发沿指针域查找,因此平均时间复杂度为O(n)2、树形结构:结点间具有层次关系,每⼀层的⼀个结点能且只能和上⼀层的⼀个结点相关,但同时可以和下⼀层的多个结点相关,称为“⼀对多”关系,常见类型有:树、堆(1)⼆叉树:⼆叉树是⼀种递归数据结构,是含有n(n>=0)个结点的有限集合,⼆叉树具有以下特点:⼆叉树可以是空树;⼆叉树的每个结点都恰好有两棵⼦树,其中⼀个或两个可能为空;⼆叉树中每个结点的左、右⼦树的位置不能颠倒,若改变两者的位置,就成为另⼀棵⼆叉树(2)完全⼆叉树:从根起,⾃上⽽下,⾃左⽽右,给满⼆叉树的每个结点从1到n连续编号,如果每个结点都与深度为k的满⼆叉树中编号从1⾄n的结点⼀⼀对应,则称为完全⼆叉树a、采⽤顺序存储结构:⽤⼀维数组存储完全⼆叉树,结点的编号对于与结点的下标(如根为1,则根的左孩⼦为2*i=2*1=2,右孩⼦为2*i+1=2*1+1=2)添加描述b、采⽤链式存储结构:⼆叉链表:添加描述三叉链表:它的结点⽐⼆叉链表多⼀个指针域parent,⽤于执⾏结点的双亲,便于查找双亲结点添加描述两种存储结构⽐较:对于完全⼆叉树,采⽤顺序存储结构既能节省空间,⼜可利⽤数组元素的下标值确定结点在⼆叉树中的位置及结点之间的关系,但采⽤顺序存储结构存储⼀般⼆叉树容易造成空间浪费,链式结构可以克服这个缺点(3)⼆叉查找树:⼆叉查找树⼜称⼆叉排序树,或者是⼀课空⼆叉树,或者是具有如下特征的⼆叉树:a、若它的左⼦树不空,则左⼦树上所有结点的值均⼩于根结点的值b、若它的右⼦树不空,则右⼦树上所有结点的值均⼤于根结点的值c、它的左、右⼦树也分别是⼆叉查找树(4)平衡⼆叉树:平衡⼆叉查找树简称平衡⼆叉树,平衡⼆叉树或者是棵空树,或者是具有下列性质的⼆叉查找树:它的左⼦树和右⼦树都是平衡⼆叉树,且左⼦树和右⼦树的⾼度之差的绝对值不超过1添加描述平衡⼆叉树的失衡及调整主要可归纳为下列四种情况:LL型、RR型、LR型、RL型(5)树:树是含有n(n>=0)个结点的有限集合,在任意⼀棵⾮空树种: a、有且仅有⼀个特定的称为根的结点b、当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每⼀个集合本⾝⼜是⼀棵树,并且T1,T2,...,Tm称为根的⼦树(6)堆:堆是具有以下特性的完全⼆叉树,其所有⾮叶⼦结点均不⼤于(或不⼩于)其左右孩⼦结点。
华文慕课数据结构与算法(上)(北京大学)章节测验答案

解忧书店 JieYouBookshop第二章单元测试1、(1分)以下哪种结构是逻辑结构,而与存储和运算无关:Which of the following structure is a logical structure regardless of the storage or algorithm:(There is only one correct answer)A、队列(queue)B、双链表(doubly linked list)C、数组(array)D、顺序表(Sequential list)答案: A2、(1分)计算运行下列程序段后m的值:Calculate the value of m after running the following program segmentn = 9; m = 0;for (i=1;i<=n;i++)for (j = 2*i; j<=n; j++)m=m+1;求m的值答案: 203、(1分)下列说法正确的是:Which options may be correct?(there are more than one correct answers)A、如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)是O(h(n))【 if f(n) is O(g(n)),g(n) is O(h(n)),then f(n) is O(h(n))】B、如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)+g(n)是O(h(n))【if f(n) is O(g(n)),g(n) is O(h(n)),so f(n)+g(n) is O(h(n))】C、如果a>b>1,logan是O(logbn),但logbn不一定是O(logan)【if a>b>1,logan is O(logbn),logbn may not be O(logan)】D、函数f(n)是O(g(n)),当常数a足够大时,一定有函数g(n)是O(af(n))【if f(n)是O(g(n)),When constant a is big enough ,there must be g(n) is O(af(n))】答案: A,B4、(1分)由大到小写出以下时间复杂度的序列:答案直接写标号,如:(1)(2)(3)(4)(5) (提示:系统基于字符匹配来判定答案,所以您的答案中不要出现空格)Write the following time complexity in descending sequence:Write down the answer labels such as (1)(2)(3)(4)(5). (Hint:This problem is judged by string matching, Please make sure your answer don't contain any blanks. )RUX4%GXZNDD{IAQWTCSEEJG.png答案: (5)(1)(2)(4)(3)5、(1分)已知一个数组a的长度为n,求问下面这段代码的时间复杂度:An array of a, its length is known as n. Please answer the time complexity of the following code.(There are more than one answers.)for (i=0,length=1;i<n-1;i++){for (j = i+1;j<n && a[j-1]<=a[j];j++)if(length<j-i+1)length=j-i+1;}Screen Shot 2017-09-05 at 23.31.19.pngA、如图,A选项B、如图,B选项C、如图,C选项D、如图,D选项答案: A,B第三章单元测试1、(1分)下面关于线性表的叙述中,正确的是哪些?Which of the followings about linear list are correct?(There are more than one answers.)Select the answer that matchesA、线性表采用顺序存储,必须占用一片连续的存储单元。
数据结构-第三次作业(答案)

第三次作业第三章栈和队列一、选择题1. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是( D )。
A. i-j-1B. i-jC. j-i+1D. 不确定的2. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是( AD )。
A. |top[2]-top[1]|=0B. top[1]+1=top[2]C. top[1]+top[2]=mD.top[1]=top[2]3. 栈在( D )中应用。
A. 递归调用B. 子程序调用C. 表达式求值D. A,B,C4. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为( D ),其中^为乘幂。
A. 3,2,4,1,1;(*^(+*-B. 3,2,8;(*^-C. 3,2,4,2,2;(*^(-D. 3,2,8;(*^(-5. 用链接方式存储的队列,在进行删除运算时( D )。
A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改6. 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( A )。
A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m7. 栈和队列的共同点是( C )。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点8. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是( C )。
A. 6 B. 4 C. 3 D. 2二、判断题1.消除递归不一定需要使用栈,此说法(√)2. 栈是实现过程和函数等子程序所必需的结构。
c语言队列数据结构

c语言队列数据结构队列是一种常见的数据结构,它遵循先进先出(FIFO)的原则。
在C语言中,我们可以使用数组或链表来实现队列数据结构。
本文将介绍C语言中队列的实现方法及其应用。
一、数组实现队列数组是一种简单且常用的数据结构,可以用来实现队列。
在C语言中,我们可以使用数组来创建一个固定大小的队列。
下面是一个使用数组实现队列的示例代码:```c#include <stdio.h>#define MAX_SIZE 100int queue[MAX_SIZE];int front = -1;int rear = -1;void enqueue(int data) {if (rear == MAX_SIZE - 1) {printf("队列已满,无法插入元素。
\n");return;}if (front == -1) {front = 0;}rear++;queue[rear] = data;}void dequeue() {if (front == -1 || front > rear) {printf("队列为空,无法删除元素。
\n"); return;}front++;}int getFront() {if (front == -1 || front > rear) {printf("队列为空。
\n");return -1;}return queue[front];}int isEmpty() {if (front == -1 || front > rear) {return 1;}return 0;}int main() {enqueue(1);enqueue(2);enqueue(3);printf("队列的第一个元素:%d\n", getFront());dequeue();printf("队列的第一个元素:%d\n", getFront());return 0;}```在上述代码中,我们使用了一个数组`queue`来存储队列的元素。
顺序存储结构、链式存储结构、索引存储结构、散列存储结构

顺序存储结构、链式存储结构、索引存储结构、散列存储结构介绍存储结构是指数据在计算机内存或磁盘等存储介质中的组织方式。
在数据结构中,常见的存储结构有顺序存储结构、链式存储结构、索引存储结构和散列存储结构。
下面将分别对这四种存储结构进行详细介绍。
一、顺序存储结构(Sequential Storage Structure):顺序存储结构是将数据元素按照其逻辑次序依次存储在一片连续的存储空间中,即在内存或磁盘上连续存放数据元素。
数据元素之间的逻辑关系通过其在存储空间中的物理位置来表示。
特点:顺序存储结构的存取速度较快,可以通过下标直接访问元素。
插入和删除操作需要移动大量元素,效率较低。
适用于元素数量固定、随机访问频繁的场景,如数组。
二、链式存储结构(Linked Storage Structure):链式存储结构通过使用指针将数据元素存储在不连续的存储空间中,并通过指针将它们连接起来。
每个数据元素中都包含一个指向下一个元素的指针,从而构成了一个链表结构。
特点:链式存储结构的插入和删除操作效率较高,只需要修改指针的指向。
访问某个元素需要从头节点开始遍历,效率较低。
适用于元素数量不固定、插入和删除频繁的场景,如链表。
三、索引存储结构(Indexed Storage Structure):索引存储结构是在顺序存储结构的基础上,为数据元素建立一个索引表,该索引表中的每个索引项包含了一个关键字和对应数据元素在存储空间中的地址。
特点:索引存储结构可以通过索引表快速定位数据元素,减少了遍历的时间。
插入和删除操作需要同时修改索引表和存储空间,效率相对较低。
适用于大型数据库等场景,可以提高查询效率。
四、散列存储结构(Hash Storage Structure):散列存储结构是通过将数据元素的关键字映射到一个散列地址来进行存储和访问的。
具体的映射函数称为散列函数,它将关键字转换为一个固定长度的散列地址。
特点:散列存储结构可以快速定位数据元素,查找效率高。
数据结构的存储方式顺序存储与链式存储

数据结构的存储方式顺序存储与链式存储数据结构的存储方式:顺序存储与链式存储数据结构是计算机科学中非常重要的概念,它是指数据元素之间的关系,以及对这些数据元素进行操作的方法。
在计算机程序中,数据结构的存储方式有两种主要形式:顺序存储和链式存储。
本文将分别介绍这两种存储方式的特点、优缺点以及应用场景。
顺序存储顺序存储是指将数据元素存储在一块连续的存储空间中,数据元素之间的物理位置是连续的。
在顺序存储中,每个数据元素都有一个唯一的下标,通过下标可以快速定位到相应的数据元素。
数组是顺序存储的典型代表,它在内存中占据一段连续的存储空间,可以通过下标来访问数组中的元素。
顺序存储的优点是:1. 存取速度快:由于数据元素在内存中是连续存储的,可以通过下标直接访问,存取速度非常快。
2. 空间利用率高:不需要额外的存储空间来存储数据元素之间的关系,空间利用率高。
然而,顺序存储也存在一些缺点:1. 插入和删除操作效率低:在顺序存储中,如果要在中间插入或删除一个数据元素,需要移动后续所有元素,效率较低。
2. 存储空间大小固定:顺序存储在创建时需要指定存储空间的大小,如果数据量超出了预先分配的空间,就需要重新分配空间,造成空间浪费或者频繁扩容。
链式存储链式存储是指将数据元素存储在内存中的任意位置,通过指针来建立数据元素之间的逻辑关系。
每个数据元素包含数据域和指针域,指针域指向下一个数据元素的地址。
链表是链式存储的典型代表,它可以动态地分配内存空间,不需要预先指定存储空间的大小。
链式存储的优点是:1. 插入和删除操作高效:在链式存储中,插入和删除操作只需要改变指针的指向,效率较高。
2. 空间动态分配:链式存储可以根据实际需要动态分配内存空间,不会造成空间浪费。
然而,链式存储也存在一些缺点:1. 存取速度相对较慢:由于数据元素在内存中的位置是随机的,需要通过指针来访问,存取速度相对较慢。
2. 存储空间占用较大:链式存储需要额外的指针域来存储数据元素之间的逻辑关系,占用额外的存储空间。
queue、deque,stack常用方法

queue、deque,stack常用方法(原创实用版2篇)目录(篇1)1.引言:介绍数据结构的基本概念2.Queue常用方法3.Deque常用方法4.Stack常用方法5.各数据结构之间的区别与联系6.结论:总结全文内容正文(篇1)数据结构是计算机科学中研究数据组织、存储和操作方式的学科。
其中,队列(Queue)、双端队列(Deque)和栈(Stack)是常用的数据结构。
本文将介绍这些数据结构的常用方法。
一、Queue常用方法1.enqueue(element):向队列尾部添加一个元素。
2.dequeue():移除队列头部的元素并返回其值。
3.is_empty():检查队列是否为空,返回布尔值。
4.size():返回队列中元素的个数。
二、Deque常用方法1.append(element):向双端队列尾部添加一个元素。
2.appendleft(element):向双端队列头部添加一个元素。
3.pop():移除双端队列尾部的元素并返回其值。
4.popleft():移除双端队列头部的元素并返回其值。
5.clear():清空双端队列中的所有元素。
三、Stack常用方法1.push(element):向栈顶添加一个元素。
2.pop():移除栈顶的元素并返回其值。
3.peek():返回栈顶的元素,但不移除它。
4.is_empty():检查栈是否为空,返回布尔值。
四、各数据结构之间的区别与联系队列、双端队列和栈都是线性数据结构,但它们的特点和使用场景不同。
队列遵循先进先出(FIFO)原则,适用于需要按照一定顺序处理元素的场景;双端队列可以从两端添加或移除元素,具有更大的灵活性;栈遵循后进先出(LIFO)原则,适用于需要回溯或撤销操作的场景。
五、结论本文介绍了Queue、Deque和Stack的常用方法,包括添加、移除元素、检查是否为空等操作。
目录(篇2)1.引言:数据结构的基本概念2.队列(Queue)的定义与常用方法3.双端队列(Deque)的定义与常用方法4.栈(Stack)的定义与常用方法5.三种数据结构的应用场景6.结论:数据结构选择的重要性正文(篇2)数据结构是计算机科学的基础,它帮助我们有效地组织、管理和存储数据。
Python中的队列

Python中的队列队列是计算机科学中常见的数据结构,它是一种受限的线性表。
与栈不同的是,队列中的元素按照先进先出的顺序处理。
在Python中,队列是通过标准库的queue模块来实现的,它提供了许多队列操作的函数和类。
本文将从队列的基本概念、实现方式、应用场景和Python中队列的常用类与方法等几个方面来介绍队列的相关知识点。
一、队列基本概念队列是一种受限的线性表,它是按照先进先出的原则进行插入和删除操作的线性表。
它通常包含两个基本操作:入队和出队。
入队操作:将一个元素插入到队列末尾。
如果队列已满,则新插入的元素无法插入。
出队操作:从队列头部删除一个元素。
如果队列为空,则无法执行出队操作。
队列的特点:队列是一种操作受限的线性表,它只能在队列的一端插入元素,在另一端删除元素。
具体而言,队列有如下特点:1.队列的元素按照先进先出(FIFO)的原则进行插入和删除操作。
2.队列是一个有尽大小的集合,当集合大小达到预设的限制时,队列被认为是满的。
当队列为空时,队列被认为是空的。
3.队列的插入和删除操作只能在两端进行,一个端口是队列头部,另一个是队列尾部。
二、队列实现方式队列的实现方式有两种:顺序队列和链式队列。
顺序队列是使用数组来实现的,而链式队列是使用链表来实现的。
1.顺序队列顺序队列是使用数组来实现的一种队列结构。
顺序队列的底层数据结构是一个数组,队列中的元素依次存储在数组中的不同位置。
数组中还需要两个指针:头指针和尾指针。
头指针指向队列头部的第一个元素,尾指针指向队列尾部的最后一个元素。
当队列为空时,头指针和尾指针指向同一个位置。
当插入一个元素时,尾指针向前移动一位;当删除一个元素时,头指针向前移动一位。
顺序队列的实现方式简单,容易理解和实现。
但是,它也存在一些问题。
首先,如果队列中存在许多空位,如果不经常移动元素,那么空间的利用率会很低。
其次,如果队列的长度是固定的,那么如果队列已满,新元素就无法插入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
双端队列
题目:
双端队列是限定在线性表的两端(LEFT端和RIGHT端)都可以进行插入和删除操作的线性表。
若采用顺序存储结构存储双端队列,要求:
(1)、定义双端队列的存储结构。
(2)、给出队列为空的判定条件和队列为满的判定条件。
(3)、给出在指定端L(表示左端)和R(表示右端)进行插入和删除操作的算法。
要求队列满时正好有一个单元为空,插入和删除元素时不容许移动元素。
C++代码:
//DoubleQueue.h 双端队列的类
#ifndef DOUBLEQUEUE_H
#define DOUBLEQUEUE_H
#include
using namespace std;
template<typename T>
class DoubleQueue
{
template<typename T>
friend ostream & operator <<(ostream &s,const DoubleQueue &q;
public:
DoubleQueue(int maxsize=20;
~DoubleQueue(;
bool IsEmpty(;
bool IsFull(;
void LeftInsert(T dq;
T LeftDelete(;
void RightInsert(T dq;
T RightDelete(;
private:
int Qmax;
int left,right;
T *dqueue;
};
template<typename T>
DoubleQueue ::DoubleQueue( int maxsize {
Qmax=maxsize+1;
dqueue=new T [Qmax];
left=right=Qmax/2;
}
template<typename T>
DoubleQueue ::~DoubleQueue(
{
delete []dqueue;
}
template<typename T>
bool DoubleQueue ::IsEmpty(
{
return left==right;
}
template<typename T>
bool DoubleQueue ::IsFull(
{
return (right+1%Qmax==left;
}
template<typename T>
void DoubleQueue ::LeftInsert(T dq {
if(IsFull(
throw"队列已满!";
left=(left+Qmax-1%Qmax;
dqueue[left]=dq;
}
template<typename T>
T DoubleQueue ::LeftDelete(
{
T temp;
if(IsEmpty(
throw"队列内无成员,不能删除!" ; temp=dqueue[left];
left=(left+1%Qmax;
return temp;
}
template<typename T>
void DoubleQueue ::RightInsert(T dq
{
if(IsFull(
throw"队列已满!";
dqueue[right]=dq;
right=(right+1%Qmax;
}
template<typename T>
T DoubleQueue ::RightDelete(
{
T temp;
if(IsEmpty(
throw"队列内无成员,不能删除!" ;
right=(rightQmax-1%Qmax;
temp=dqueue[right];
return temp;
}
template<typename T>
ostream & operator <<(ostream &s,const DoubleQueue &q
int l=q.left;
int r=q.right;
while(l!=r
{
s<<' '<
l=(l+q.Qmax+1%q.Qmax; }
return s;
}
#endif
//Main 主函数
#include
#include"DoubleQueue.h" using namespace std; void main(
{
DoubleQueue<int> s(10; try
{
s.LeftDelete(;
}
catch(char *s
cout<
}
for(int i=0;i<10;i++ {
if(i<8
s.LeftInsert(i;
else
s.RightInsert(i;
}
cout<
try
{
s.LeftInsert(11;
}
catch(char *s
{
cout<
}
}。