链式队列:用链表实现
静态队列(循环队列):用数组实现
为了方便 我们先把一个简单的队列画出来(这里的“0”指的是没有元素!!)(Typora不会做表格,只能打表格了..)
4 |0|
3 |0|<——rear
2 |2|
1 |3|
0 |8|<——front
1. 静态队列为什么必须是循环队列
2. 循环队列需要几个参数来确定,及其含义?
3. 如何判断循环队列是否为空
4. 如何判断循环队列是否已满
4 |0|<——rear
3 |9|
2 |8|
1 |5|
0 |3|<——front
//2020.4.3//16.18
#include<iostream>
using namespace std;
typedef struct Queue
{
int* pBase; //循环队列形式类似数组,设定数组首地址
int front; //队头
int rear; //队尾
int len; //队伍长度
}QUEUE, * PQUEUE;
//初始化队列
void init_queue(PQUEUE, int);
//判断队列是否已满
bool is_full(PQUEUE);
//插入元素
void entry_queue(PQUEUE, int);
//判断队列是否为空
bool is_empty_(PQUEUE); //用is_empty疯狂报错 搞了半天原来vs自带这个函数..只能改名了。。还不会
//删除元素
void out_queue(PQUEUE);
//遍历队列
void traverse_queue(PQUEUE);
int main()
{
int val;
int length = 5;
QUEUE Q;
PQUEUE pQ = &Q;
init_queue(pQ, length);
entry_queue(pQ, 1);
entry_queue(pQ, 0);
entry_queue(pQ, 4);
entry_queue(pQ, 2);
entry_queue(pQ, 8); //虽然队列长度是5,但最大元素只能是4
entry_queue(pQ, 5);
traverse_queue(pQ);
out_queue(pQ);
return 0;
}
void init_queue(PQUEUE pQ, int length)
{
pQ->len = length;
pQ->pBase = (int*)malloc(sizeof(int) * pQ->len);
pQ->front = 0;
pQ->rear = 0; //现在没有元素,数组第一个下标为0
return;
}
bool is_full(PQUEUE pQ)
{
if ((pQ->rear + 1) % pQ->len == pQ->front)
return true;
else
return false;
}
void entry_queue(PQUEUE pQ, int val)
{
if (is_full(pQ))
cout << "队列已满,元素" << val << "插入失败" << endl;
else
{
pQ->pBase[pQ->rear] = val;
pQ->rear = (pQ->rear + 1) % pQ->len;
}
return;
}
bool is_empty_(PQUEUE pQ)
{
if (pQ->front == pQ->rear)
return true;
else
return false;
}
void out_queue(PQUEUE pQ)
{
if (is_empty_(pQ))
cout << "队列为空,无法删除元素" << endl;
else
{
cout << "出队元素为" << pQ->pBase[pQ->front] << endl;
pQ->front = (pQ->front + 1) % pQ->len;
}
return;
}
void traverse_queue(PQUEUE pQ)
{
if (is_empty_(pQ))
cout << "队列为空";
int i = pQ->front;
while (i != pQ->rear)
{
cout << pQ->pBase[i] << " ";
i = (i + 1) % pQ->len;
}
return;
}
原文:https://www.cnblogs.com/yuuuuu422/p/12623679.html