循环队列Queue--使用顺序存储结构(数组)实现
2017-09-20 13:12
691 查看
本人之前总是看,但是上手写代码少。就是那种眼高手低的(汗)。这段时间有空,就来补补吧,从基础开始...
希望能够坚持下去。
数据成员:
头索引:front
尾索引:rear
判断条件:
判断队列“空”: front == rear
判断队列“满”:(rear + 1) % MAX_SIZE == front, 头和尾之间,保留一个元素空间;
计算队列长度:
(rear - front + MAX_SIZE) % MAX_SIZE
示例代码:
#include <limits>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE (10)
#define RAMDOM(x) (rand() % 100)
typedef int QElement;
class SqQueue
{
public:
SqQueue()
{
InitQueue();
}
~SqQueue()
{}
void InitQueue()
{
front = 0;
rear = 0;
for (int i = 0; i < MAX_SIZE;++i)
{
data[i] = std::numeric_limits<int>::max();
}
}
int QueueLength()
{
return (rear - front + MAX_SIZE) % MAX_SIZE;
}
int InQueue(QElement e)
{
//判断队列满
if ((rear + 1) % MAX_SIZE == front)
{
return -1;
}
data[rear] = e;
rear = (rear + 1) % MAX_SIZE;
return 0;
}
int OutQueue(QElement *e)
{
//判断队列空
if (front == rear) return -1;
*e = data[front];
data[front] = std::numeric_limits<int>::max();
front = (front + 1) % MAX_SIZE;
return 0;
}
void PrintQueue()
{
if (rear > front)
{
for (int i = front; i < rear; ++i)
{
printf("data[%03d] : %d \n", i, data[i]);
}
}
else
{
for (int i = front; i < MAX_SIZE; ++i)
{
printf("data[%03d] : %d \n", i, data[i]);
}
for (int i = 0; i < rear; ++i)
{
printf("data[%03d] : %d \n", i, data[i]);
}
}
printf("---------------\n");
}
private:
QElement data[MAX_SIZE];
int front;
int rear;
};
int main()
{
SqQueue q;
srand(time(0));
//插入8个元素
for (int i = 0; i < 8; i++)
{
q.InQueue(RAMDOM(100));
}
q.PrintQueue();
//删除2个元素
QElement e;
q.OutQueue(&e);
q.OutQueue(&e);
q.PrintQueue();
//再插入3个元素
for (int i = 0; i < 3; i++)
{
q.InQueue(RAMDOM(100));
}
q.PrintQueue();
return 0;
}
希望能够坚持下去。
数据成员:
头索引:front
尾索引:rear
判断条件:
判断队列“空”: front == rear
判断队列“满”:(rear + 1) % MAX_SIZE == front, 头和尾之间,保留一个元素空间;
计算队列长度:
(rear - front + MAX_SIZE) % MAX_SIZE
示例代码:
#include <limits>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE (10)
#define RAMDOM(x) (rand() % 100)
typedef int QElement;
class SqQueue
{
public:
SqQueue()
{
InitQueue();
}
~SqQueue()
{}
void InitQueue()
{
front = 0;
rear = 0;
for (int i = 0; i < MAX_SIZE;++i)
{
data[i] = std::numeric_limits<int>::max();
}
}
int QueueLength()
{
return (rear - front + MAX_SIZE) % MAX_SIZE;
}
int InQueue(QElement e)
{
//判断队列满
if ((rear + 1) % MAX_SIZE == front)
{
return -1;
}
data[rear] = e;
rear = (rear + 1) % MAX_SIZE;
return 0;
}
int OutQueue(QElement *e)
{
//判断队列空
if (front == rear) return -1;
*e = data[front];
data[front] = std::numeric_limits<int>::max();
front = (front + 1) % MAX_SIZE;
return 0;
}
void PrintQueue()
{
if (rear > front)
{
for (int i = front; i < rear; ++i)
{
printf("data[%03d] : %d \n", i, data[i]);
}
}
else
{
for (int i = front; i < MAX_SIZE; ++i)
{
printf("data[%03d] : %d \n", i, data[i]);
}
for (int i = 0; i < rear; ++i)
{
printf("data[%03d] : %d \n", i, data[i]);
}
}
printf("---------------\n");
}
private:
QElement data[MAX_SIZE];
int front;
int rear;
};
int main()
{
SqQueue q;
srand(time(0));
//插入8个元素
for (int i = 0; i < 8; i++)
{
q.InQueue(RAMDOM(100));
}
q.PrintQueue();
//删除2个元素
QElement e;
q.OutQueue(&e);
q.OutQueue(&e);
q.PrintQueue();
//再插入3个元素
for (int i = 0; i < 3; i++)
{
q.InQueue(RAMDOM(100));
}
q.PrintQueue();
return 0;
}
相关文章推荐
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- java使用数组实现循环队列
- Data Structure-2 Queue 循环队列,用数组实现
- 循环队列Queue–使用链式存储结构实现
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- 使用不完全填满数组的实现的循环FIFO(队列)
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 使用数组实现栈和循环队列(JAVA语言)
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- Python 使用循环数组实现队列 (基于class, 包含迭代器)
- 循环队列拾遗-使用数组实现循环队列
- 使用循环数组高效的实现队列类
- Java中队列的实现(1)-使用顺序存储结构(数组)以及实现
- C++用数组实现栈和循环队列
- 简单队列和循环队列的实现--数组实现
- 面试题---使用栈stack实现队列queue
- Java数组实现循环队列
- (数据结构与算法分析 四)------数组循环队列的实现( Java语言描述)
- bash shell数组模拟队列queue和shell数组使用技巧
- 简单循环队列模版(数组实现)