栈的基本操作
InitStack(&S):初始化空栈
StackEmpty(S):判断栈是否为空
Push(&S, x):进栈,若栈未满,就将x加入成为新栈顶
Pop(&S, &x):出栈,若栈非空,就弹出栈顶元素
GetTop(S, &x):读取栈顶元素,若栈非空,就用x返回栈顶元素
DestroyStack(&S):栈销毁,释放栈占用的存储空间
ps:
- top()是取栈顶元素,不会删除里面的元素,返回栈顶的引用;
- pop()是删除栈顶元素,返回void。
队列的基本操作
InitQueue(&Q):初始化一个空队列
QueueEmpty(Q):判队列是否为空
EnQueue(&Q, x):入队,若队列未满,就将x加入成为新的队尾
DeQueue(&Q, &x):出队,若队列非空,就删除队头元素用x返回
GetHead(Q, &x):读队列头元素,若队列非空,就将队头元素赋值给x
练习:
题目:
用队列实现栈
分析:
主要就是pop操作不容易,这里可以每次弹出的时候用第二个队列存着除最后一个数据之外的数据,然后删除了再移回来
int pop() {
int size = que1.size();
size--;
while (size--) {
que2.push(que1.front());
que1.pop();
}
int result = que1.front();
que1.pop();
que1 = que2;
while (!que2.empty()) {
que2.pop();
}
return result;
}