队列
初始头指针0 和-1
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int q[N], tt, hh, n;
void init() {
hh = 0, tt = -1;
}
void push(int a) {
q[++tt] = a;
}
void pop() {
hh++;
}
void empty() {
if (hh > tt)cout << "YES" << endl;
else cout << "NO" << endl;
}
void top() {
cout << q[hh] << endl;
}
int main() {
init();
cin >> n;
while (n--) {
string s;
cin >> s;
if (s == "push") {
int x;
cin >> x;
push(x);
}
if (s == "pop") {
pop();
}
if (s == "empty") {
empty();
}
if (s == "query") {
top();
}
}
return 0;
}
循环队列
初始头指针0 尾指针0
不可是0 -1因为初始情况和尾端溢出到头节点的时候情况一样
ex **[0] ->*[*0]
[0 * ]-> [0 *] * ->循环到前面 * [ *0 ]
这个时候不知道是不是已经满了
为了避免这种情况发生只能选择0 0
#include <iostream>
#include <queue>
using namespace std;
const int N = 4;
typedef struct Queue {
int data[N];
int front, rear;
bool push(int d) {
if ((rear + 1) % N != front) {
data[(rear + 1) % N] = d;
rear = (rear + 1) % N;
return true;
}
return false;
}
bool pop() {
if ((front + 1) % N != rear) {
front = (front + 1) % N;
return true;
} else {
return false;
}
}
bool empty() {
if ((rear) % N != front) {
cout << "NO" << endl;
return false;
}
printf("YES\n");
return true;
}
void top() {
printf("%d\n", data[front]);
}
} que;
void Init(Queue &que) {
que.front = 0;
que.rear = 0;
}
bool emptyqueue(Queue q) {
if (q.front > q.rear)return true;
else return false;
}
int main() {
Queue que;
Init(que);
int n;
cin >> n;
while (n--) {
string s;
cin >> s;
if (s == "push") {
int x;
cin >> x;
cout << que.push(x) << endl;
}
if (s == "pop") {
cout << que.pop() << endl;
}
if (s == "empty") {
que.empty();
}
if (s == "query") {
que.top();
}
}
return 0;
}