队列结构定义
#define MaxSize 100
typedef struct {
int data[MaxSize];
int front, rear; //队列头尾指针
}SqQueue;
循环队列基本操作
初始化
void initQueue(SqQueue &Q) {
Q.rear = Q.front = 0;
}
判队列是否为空
bool isEmpty(SqQueue Q) {
return Q.rear == Q.front ? true : false;
}
进队
bool EnQueue(SqQueue &Q, int x) {
if ((Q.rear + 1) % MaxSize == Q.front)
return false;
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
出队
bool DeQueue(SqQueue &Q, int &x) {
if (Q.rear == Q.front)
return false;
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
}
相关题目
通过栈实现队列元素逆置
思路:
取出队列元素放入栈,全部放入之后,从栈中在放入队列中
void inverse(Stack &S, Queue &Q) {
while(!QueueEmpty(Q)) {
x = DeQueue(Q);
Push(S, x);
}
while(!StackEmpty(S)) {
Pop(S, x);
EnQueue(Q, x);
}
}
利用两个栈S1和S2来模拟队列
题意
思路:
利用栈的后进先出的特性,将元素插入至S1中,然后将S1中的插入到S2中,即S2的顺序是原来的逆序。
入队:用S1来执行入队操作,若S1已满,必须保证S2为空,才能将S1中的元素全部插入到S2中。
出队:用S2来执行出队操作,若S2为空,则先将S1中元素全部送入S2。
class CQueue {
public:
stack<int> st1;
stack<int> st2;
CQueue() {
}
void appendTail(int value) {
st1.push(value);
}
int deleteHead() {
if(st2.empty()) {
while(!st1.empty()) {
st2.push(st1.top());
st1.pop();
}
}
if (st2.empty()) return -1;
else{
int ans = st2.top();
st2.pop();
return ans;
}
}
};
Q.E.D.