队列
来源:互联网 发布:linux 设置ip地址 编辑:程序博客网 时间:2024/06/05 20:29
队列的定义
队列是一种只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。只允许删除的一端叫做删除,只允许插入的一端叫做队尾。
循环队列
基本概念
顺序队列也使用一个地址连续的存储单元来依次存放当前队列中的元素,由于队头和队尾位置随入队和出队的操作而变化,因此需要设置两个指针front和rear,分别指示当前队列队头元素和队尾元素所在内存单元的位置。
存储结构
#define MAXSIZE 100;
typedef struct SeqQueue{
Elemtype *base; //base指向队列存储区的首地址
int front;
int rear;
}SeqQueue;
基本操作
1.循环队列的初始化
SeqQueue InitQueue{
SeqQueue Q;
Q.base = (Elemtype *)malloc(MAXSIZE * sizeof(Elemtype));
if(! Q.base){
printf("error\n");
exit(0);
}
Q.front = 0;
Q.rear = 0;
return Q;
}
2.判断循环队列空
int QueueEmpty(SeqQueue Q){
return (Q.front == Q.rear) ? 1 : 0;
}
3.判断循环队列满
int QueueFull(SeqQueue Q){
return (Q.front == (Q.rear + 1) % MAXSIZE ) ? 1 : 0;
}
4.入队操作
SeqQueue EnQueue(SeqQueue Q, Elemtype x){
if(QueueFull){
printf("队满");
exit(0);
}else{
*(Q.base + Q.rear) = x;
Q.rear = (Q.rear + 1) % MAXSIZE;
}
return Q;
}
5.出队操作
SeqQueue DeQueue(SeqQueue Q, Elemtype *e){
if(! QueueEmpty(Q)){
*e = *(Q.base + Q.front);
Q.front = (Q.front + 1) % MAXSIZE;
return Q;
}
}
链式队列
基本概念
队列的链式存储结构,是限制仅在表尾插入,表头删除的单链表。
存储结构
typedef struct QueueNode{
Elemtype data;
struct QueueNode *next;
}QueueNode;
typedef struct LinkQueue{
QueueNode *front;
QueueNode *rear;
}
基本操作
1.链队列的初始化
LinkQueue InitQueue(){
LinkQueue Q;
QueueNode *p;
p = (QueueNode *)malloc(sizeof(QueueNode));
if(p){
Q.front = Q.rear = p;
Q.front->next = NULL;
return Q;
}else{
printf("error\n");
exit(0);
}
}
2.链队列的入队操作
LinkQueue EnQueue(LinkQueue Q, Elemtype x){
QueueNode *p;
p = (QueueNode *)malloc(sizeof(QueueNode));
if(!p){
printf("error\n");
exit(0);
}else{
p->data = x;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return Q;
}
}
3.链队列的出队操作
LinkQueue DeQueue(LinkQueue Q, Elemtype *e){
QueueNode *p;
if(QueueEmpty(Q)){
printf("error\n");
exit(0);
}else{
p = Q.front->next;
*e = p->data;
Q.front = p->next;
if(Q.front == p){
Q.rear = Q.front;
}
free(p);
}
return Q;
}
0 0
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 高精度算法(超出范围的数值的计算)
- HDU 1081 To The Max DP
- Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define 解决
- 07_Java 多线程编程
- 为Arch Linux安装VMWare-Tools
- 队列
- 1.操作系统基础概念
- iso/osi七层模型
- 5.5编写一个程序,把一个指定的值存储到一个整数中指定的几个位。它的原型如下
- 莫队算法笔记
- static关键字
- 循环队列的小例子
- 实习经验总结
- opengl3 PointSprite及在粒子系统中的使用