队列的顺序表示及实现,循环队列
2015-05-18 12:07
453 查看
判满条件为:front=(rear+1)%size
不是只有排序,二叉树才叫数据结构,面试栽在基本的数组和队列,链表,栈的有的是!!!本文对循环队列的重要操作作出总结。注:为了避免队列空和满两个状态混淆,
采用空闲一个位置的方式,即N个元素空间的循环队列最多只能存放N-1个有效元素。这也是大多数教材的做法。
1) 循环队列初始化:front=rear=0;
2)入队操作:rear=(rear+1)%size;
3)出队操作:front=(front+1)%size;
4)判断是否为空队列:front==rear;//程序中的if语句体现,没有单独写一个函数
5)判断队列是否已满:front=(rear+1)%size;//程序中的if语句体现,没有单独写一个函数
6)遍历队列各元素。
不是只有排序,二叉树才叫数据结构,面试栽在基本的数组和队列,链表,栈的有的是!!!本文对循环队列的重要操作作出总结。注:为了避免队列空和满两个状态混淆,
采用空闲一个位置的方式,即N个元素空间的循环队列最多只能存放N-1个有效元素。这也是大多数教材的做法。
1) 循环队列初始化:front=rear=0;
2)入队操作:rear=(rear+1)%size;
3)出队操作:front=(front+1)%size;
4)判断是否为空队列:front==rear;//程序中的if语句体现,没有单独写一个函数
5)判断队列是否已满:front=(rear+1)%size;//程序中的if语句体现,没有单独写一个函数
6)遍历队列各元素。
/************************************************************* *循环队列的C语言实现,及基本操作 *************************************************************/ #include<stdio.h> #include<stdlib.h> #include<assert.h> //#include<stdbool.h> const int MAXSIZE=6; typedef int QElemType; //循环队列结构定义------------------------------------------- typedef struct SqQueue { QElemType *base;//数组名是常量,不能修改 int front; int rear; /*int count;*/ }SqQueue,*SqQueuePtr; //构造一个空队列Q------------------------------------------- void InitQueue(SqQueue *Q) { Q->base=(QElemType *)malloc(MAXSIZE*sizeof(QElemType)); if(!Q->base) return; Q->front=Q->rear=0; return; } //返回Q的元素个数,即队列的长度----------------------------- int QueueLength(SqQueue *Q) { return(Q->rear-Q->front+MAXSIZE)%MAXSIZE; } //插入元素e为Q新的队尾元素--------------------------------- void EnQueue(SqQueue *Q,QElemType e) { if((Q->rear+1)%MAXSIZE==Q->front) return; Q->base[Q->rear]=e; Q->rear=(Q->rear+1)%MAXSIZE; return; } //若队列不空,删除Q的队头元素,用e返回其地址-------------- int DeQueue(SqQueue *Q,QElemType *e) { if(Q->front==Q->rear) return; *e=Q->base[Q->front]; Q->front=(Q->front+1)%MAXSIZE; return *e; } //遍历输出循环队列所有元素-------------------------------- void QueueTraverse(SqQueue *Q) { int p=Q->front; if(Q->front==Q->rear) return; while(p!=Q->rear) { printf("输出元素 %d\n",Q->base[p]); p=(p+1)%MAXSIZE; } } int main() { SqQueue Q; printf("初始化队列为空队列\n"); InitQueue(&Q); printf("循环队列长度=%d\n",QueueLength(&Q)); printf("将元素1插入到队尾\n"); EnQueue(&Q,1); printf("循环队列长度=%d\n",QueueLength(&Q)); printf("将元素2插入到队尾\n"); EnQueue(&Q,2); printf("循环队列长度=%d\n",QueueLength(&Q)); printf("遍历输出1和2\n"); QueueTraverse(&Q); return 1; }
相关文章推荐
- 循环队列-队列的顺序表示和实现
- 循环队列——队列的顺序表示与实现(c语言)
- 3.4.3 循环队列--------队列的顺序表示与实现(1)
- 循环队列——队列的顺序表示和实现
- 循环队列详解及队列的顺序表示和实现
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 循环队列——队列的顺序表示和实现
- 数据结构(5)——循环队列的顺序表示和实现
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 数据结构之队列的顺序表示及其实现(循环队列)
- 循环队列———队列的顺序表示和实现
- 循环队列 队列的顺序表示和实现
- 循环队列——队列的顺序表示和实现
- 数据结构(5):循环队列——队列的顺序表示和实现
- 3.5.2循环队列——队列的顺序表示和实现
- 《循环队列---队列的顺序表示和实现》
- 重温数据结构:队列的链式实现、顺序实现及循环队列
- STL之顺序容器适配器(队列的循环数组实现)
- 循环队列操作之一:循环队列的表示和实现(C语言版本)
- C_栈和队列(ADT)-队列的非循环(无头指针)顺序表示和实现