栈与队列-经验分享

数据结构与STL

栈是只能在某一端插入和删除的特殊线性列表,具有先进后出的特性。

栈的常用函数
image

例题:

验证栈序列

题目描述:

给出pushed和poped两个序列,其取值从1到n(n<=100000)。

已知入栈序列是pushed,如果出栈序列有可能是poped,则输出Yes,否则输出No。

输入样例:

5

1 2 3 4 5

3 5 2 4 1

输出样例:

No

代码实现:

int ptr1=1,ptr2=1,flag=0;

while(ptr2<=n){
while(s.empty()||s.top()!=poped[ptr2]&&ptr1<=n){

s.push(pushed[ptr1++];

}

if(!s.empty()&&s.top()==poped[ptr2]){

s.pop();

ptr2++;

}

else{

cout<<”No”<<endl;

flag=1;

break;

}

}

if(flag==0){
cout<<”Yes”<<endl;

}

队列(queue),遵循先进先出的原则。

使用队列存取数据元素时,数据元素只能从表的一端进入队列,另一端出队列。

队列常用函数:
image
优先队列和队列一样,只能从队尾插入元素,从队首删除元素。

优先队列的特性时队列中优先级最大的元素总是位于队首(可以理解为自动排序)。

定义普通优先队列:

priority_queue<int,vector,greater >

可以用重载运算符”<”重新定义优先队列中元素的排列规则。

常用函数:
image

1 个赞

好耶!图终于发出来了!

2 个赞