数据结构_4:队列:C语言
来源:互联网 发布:node书推荐 编辑:程序博客网 时间:2024/06/13 22:40
- 顺序队列=====假溢出
循环队列
- 初始化—– Q.front=Q.rear=0
- 队首指针进1—Q.front=(Q.front+1)%MaxSize
- 队尾指针进1—Q.rear=(Q.rear+1)%MaxSize
- 队列长度——(Q.rear+MaxSize-Q.front)%MaxSize
- 出队入队:指针都顺时针进1
判断队列是否是空
- 牺牲一个单元来区分对空和对满:入队时少用一个单元==对头指针在队尾指针的下一个位置作为对满的标志
- 队满: (Q.rear+1)%MaxSize==Q.front
- 队空:Q.front==Q.rear
- 队列的元素个数: (Q.rear-Q.front+MaxSize)%MaxSize
- 数据结构
typedef int Status; typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int *//* 循环队列的顺序存储结构 */typedef struct{ QElemType data[MAXSIZE]; int front; /* 头指针 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */}SqQueue;
- 基本函数
/* 初始化一个空队列Q */Status InitQueue(SqQueue *Q){ Q->front=0; Q->rear=0; return OK;}/* 若队列Q为空队列,则返回TRUE,否则返回FALSE */Status QueueEmpty(SqQueue Q){ if(Q.front==Q.rear) /* 队列空的标志 */ return TRUE; else return FALSE;}/* 返回Q的元素个数,也就是队列的当前长度 */int QueueLength(SqQueue Q){ return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}/* 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR */Status GetHead(SqQueue Q,QElemType *e){ if(Q.front==Q.rear) /* 队列空 */ return ERROR; *e=Q.data[Q.front]; return OK;}/* 若队列未满,则插入元素e为Q新的队尾元素 */Status EnQueue(SqQueue *Q,QElemType e){ if ((Q->rear+1)%MAXSIZE == Q->front) /* 队列满的判断 */ return ERROR; Q->data[Q->rear]=e; /* 将元素e赋值给队尾 */ Q->rear=(Q->rear+1)%MAXSIZE;/* rear指针向后移一位置, */ /* 若到最后则转到数组头部 */ return OK;}/* 若队列不空,则删除Q中队头元素,用e返回其值 */Status DeQueue(SqQueue *Q,QElemType *e){ if (Q->front == Q->rear) /* 队列空的判断 */ return ERROR; *e=Q->data[Q->front]; /* 将队头元素赋值给e */ Q->front=(Q->front+1)%MAXSIZE; /* front指针向后移一位置, */ /* 若到最后则转到数组头部 */ return OK;}
练习题
- 两个队列模拟一个栈
http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html
q1是专职进出栈的,q2只是个中转站
入栈:直接入队列q1即可
- 出栈:把q1的除最后一个元素外全部转移到队q2中,然后把刚才剩下q1中的那个元素出队列。之后把q2中的全部元素转移回q1中
void Push(Queue *q1, Queue *q2, int k){ EnQueue(q1, k);}int Pop(Queue *q1, Queue *q2){ int tmp; if(IsQueueEmpty(q1) == 1) { printf("Stack Empty!\n"); } else { while(SizeOfQueue(q1) != 1) { EnQueue(q2, DeQueue(q1)); } tmp = DeQueue(q1); while(IsQueueEmpty(q2) == 0) { EnQueue(q1, DeQueue(q2)); } return tmp; }}
0 0
- 数据结构_4:队列:C语言
- 数据结构_4:队列:C++
- 数据结构_4:队列: STL
- C语言数据结构之-队列
- C语言数据结构之队列
- 数据结构.队列(C语言实现)
- C语言数据结构-顺序队列
- C语言数据结构-链队列
- 数据结构---队列C语言实现
- 复习(数据结构):队列:c语言
- 8.1 C语言队列-----数据结构
- 循环队列 C语言数据结构
- C语言 数据结构 队列 链队列
- 数据结构之队列的实现(c语言)
- C语言实现数据结构中的链队列
- 数据结构之队列(C语言)
- 数据结构:队列(C语言实现)
- 数据结构(C语言)实现循环队列
- Ubuntu安装MPlayer方法
- SerialPort类打开超过9串口问题
- 在SQL server中设置表的自动编号功能
- 360浏览器启动时不打开主页的原因
- 初学数据库,不喜勿喷,如果有错请提出
- 数据结构_4:队列:C语言
- c++ 只在堆上创建对象
- Hadoop伪分布式搭建
- Python Division //
- 翻转链表的C++实现
- 关于CALayer及其和UIView的区别与选择
- 16-01-12 JDK 环境配置的细节
- Python入门
- 剑指offer题目记录(长期更新)