初始化循环队列、添加元素、打印循环队列
学习队列重要的是理解如何判空、如何判断队满以及如何得出循环队列的元素个数。还应该知道为什么11个元素容量的循环队列一般只放10个元素。这些如果能够理解了,增删改查就都明白了。请看代码,我已将重要的东西注释出来了哦!!!!
#include <stdio.h>
#include <iostream>
#define maxsize 10
using namespace std;
//利用受限顺序表来表示队列
typedef struct queue {
int data[maxsize];
int f, r;
};
bool init_queue(queue* t) {
//初始化循环队列,首尾部对其为0位
t->r = 0;
t->f = t->r;
return true;
}
bool append(queue* t, int data) {
//添加元素时先判断循环队列是否满了,尾部向前一步为首则为满
if ((t->r + 1) % maxsize == t->f) {
cout << "添加失败" << endl;
return false;
}
//添加元素时先存数据,尾部再向前一步。
t->data[t->r] = data;
//取余的方法巧妙的避免了10到0位的溢出!!!
t->r = (t->r + 1) % maxsize;
cout << "添加成功" << endl;
return true;
}
void print(queue* t) {
//队列为空时首尾相等,尾指针指向的区域不存放元素。
if (t->f == t->r) {
cout << "队列为空!" << endl;
}
else {
int p = t->f;
//循环次数取自队列元素个数
for (int i = 0; i < (t->r - t->f + maxsize) % maxsize; i++) {
cout << t->data[(p + i) % maxsize] << endl;
}
}
return;
}
int main() {
queue q;
init_queue(&q);
bool b = true;
while ((q.r + 1) % maxsize != q.f) {
int num;
cout << "请输入一个数字" << endl;
cin >> num;
b = append(&q, num);
print(&q);
}
cout << "-----------打印最终队列元素----------" << endl;
print(&q);
return 0;
}