堆栈 (LIFO)

来源:互联网 发布:mac mail gmail 编辑:程序博客网 时间:2024/05/02 23:46

这里写图片描述

数组实现:

#include <stdio.h>#define N 1000int main(){    int i, n, target[N];    while(scanf("%d", &n) == 1)    {        int stack[N], top = -1;        for(i = 0; i < n; i++)      scanf("%d", &target[i]);        int A = 1, B = 0;        int ok = 1;        while(B < n)        {            if(A == target[B]) { A++;  B++;  }            else if(top >= 0 && stack[top] == target[B]) {  top--; B++; }            else if(A <= n) { stack[++top] = A++;  }            else  {  ok = 0; break;  }        }        printf("%s\n", ok ? "Yes" : "No");    }    return 0;}

STL实现:

#include <cstdio>#include <stack>#define N 1000using namespace std;int main(){    int i, n, target[N];    while(scanf("%d", &n) == 1)    {        stack<int> s;        for(i = 0; i < n; i++)   scanf("%d", &target[i]);        int A = 1, B = 0, ok = 1;        while(B < n)        {            if(A == target[B]) { A++; B++; }            else if(!s.empty() && s.top() == target[B]) { s.pop(); B++; }            else if(A <= n) { s.push(A++);}            else { ok = 0;  break; }        }        printf("%s\n", ok ? "Yes" : "No");    }    return 0;}
0 0
原创粉丝点击