栈与队列

一、栈(stack)是一种后进先出的数据结构。
栈顶指针是始终指向栈的最上方元素的一个标记,当使用数组实现栈时,栈顶指针是一个int型的变量(数组下标从0开始),通常记为TOP;而当使用链表实现栈时,则是一个int*型的指针。栈的常用操作:
(1)清空(clear)
栈的清空操作将栈顶指针TOP置为-1,表示栈中没有元素。

void clear()
{
 TOP=-1;
 }

(2)获取栈内元素个数(size)
由于栈顶指针TOP始终指向栈顶元素,而数组下标从0开始,因此栈内元素的数位TOP+1.

int size(){
  return TOP+1;
  }

(3)判空(empty)
由栈顶指针TOP的定义可知,仅当TOP==-1时为栈空,返回true;否则,返回false。

bool empty(){
  if(TOP==-1 return true;
  else return false;
  }

(4)进栈(push)
push()操作将x置于栈顶。由于栈顶元素TOP指向栈顶元素,因此需要先把TOP加1,然后把x存入TOP指向的位置。

void push(int x){
 st[++TOP]=x;
 }

(5)出栈(pop)
pop()操作将栈顶元素出栈,而事实上可以直接将栈顶元素减1来实现这个效果。

void pop(){
TOP--;
}

(6)读栈顶元素(top)
由于栈顶元素TOP始终指向栈顶元素,因此st[TOP]即为栈顶元素。

int top(){
  return st[top];
  }

在使用pop()函数和top()函数之前必须使用empty()函数判断栈是否为空。
STL中没有实现栈的清空,如果需要实现栈的清空,可以用一个while循环反复pop()出元素直到栈空。

while(!st.empty()){
st.pop();
}

二、队列(queue)是一种先进先出的数据结构。
一般来说,需要一个队首指针front来指向队首元素的第一个位置,而使用一个队尾指针rear来指向队尾元素。和栈类似,当使用数组类实现队列时,队首指针和队尾指针为Int型变量,而当使用链表来实现队列时,则为int*型变量的指针。
队列的常用操作:
(1)清空(clear)
使用数组来实现队列时,初始状态为front=-1,rear=-1。

void clear(){
front=rear=-1;
}

(2)获取队列的内元素的个数(size)
显然rear-front即为队列内元素的个数。

int size(){
return front-rear;
}

(3)判空(empty)
判断队列为空的条件为front==rear

bool empty(){
  if(front==rear) return true;
  else return false;
  }

(4)入队(push)
由于队尾指针rear指向队尾元素,因此把元素入队时,需要先把rear加1,然后再存放到rear指向的位置。

void push(int x){
  q[++rear]=x;
  }

(5)出队(pop)
可以直接把队首指针加1来实现出队的效果。

void pop(){
  front++;
  }

(6)取队首元素(get_front)
由于队首指针front指向的是队首元素的前一个元素,因此front+1才是队首元素的位置。

int get_front(){
    return q[front+1];
    }

(7)取队尾元素
由于队尾元素rear指向的是队尾元素,因此可以直接访问rear的位置

int get_rear(){
  return q[rear];
  }

在使用pop()函数、get_front()函数,get_rear()函数之前必须先使用empty()函数判断队列是否为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值