1.栈——stack
栈是一种后进先出的数据结构。
栈顶指针始终指向栈的最上方元素。
(1)当使用数组实现栈时,栈顶指针是一个int型变量TOP。栈空时,TOP=-1。
(2)当使用链表实现栈时,则是一个int*型的指针。一般用STL的stack来写指针。可参考我另一篇博文。算法笔记——STL介绍
用数组实现栈的常见操作:
(1)清空(clear)
void clear(){
TOP == -1;
}
(2)判空(empty)
bool empty(){
if(TOP == -1) return true;
else return false;
}
(3)进栈(push)
void push(int x){
st[++TOP] = x;
}
(4)出栈(pop)
void pop(){
TOP--;
}
(5)获取栈内元素个数
int size(){
return TOP;
}
(6)取栈顶元素(top)
int top(){
return st[top];
}
在使用出栈和取栈顶元素时必须在栈非空的情形下才能使用。
在STL中没有实现栈的清空,实现栈的清空,可以循环pop出元素直到栈空(但一般是重新定义一个栈):
while(!st.empty()){
st.pop();
}
2.队列——queue
队列是一种先进先出的数据结构。队列总是从队尾加入元素,而从队首移除元素。一般来说,需要一个队首指针来front来指向队首元素的前一个位置,而使用一个队尾指针rear来指向队尾元素
(1)当使用数组实现队列时,front和rear为int型变量,初始状态front和rear都是-1。
(2)当使用链表实现栈时,则是一个int*型的指针。用STL的squeue来写指针。可参考我另一篇博文。算法笔记——STL介绍
用数组q[]来实现队列,数组坐标从0开始,下面是一些常见操作的代码实现:
(1)清空(clear)
void clear(){
front = rear = -1;
}
(2)获取队列内元素个数(size)
int size(){
return rear-front;
}
(3)判空(empty)
int empty(){
if(rear == front) return ture;
else return false;
}
(4)入队(push)
void push(int x){
q[++rear] = x;
}
(5)出队(pop)
void pop(){
front++;
}
(6)取队首元素(get_front)
int get_front(){
return q[front+1];
}
(7)取队尾元素(get_rear)
int get_rear(){
return q[rear];
}
pop()出队函数,get_front()取队首函数,get_rear()取队尾函数,都要先empty()判断队列是否为空。