1. 程式人生 > >[資料結構-棧]棧的基本操作&括號匹配

[資料結構-棧]棧的基本操作&括號匹配

堆疊的三種實現方式

用靜態資料實現

#include<stdio.h>
#define MAX_SIZE 100

int top = -1;
int stack[MAX_SIZE];

void init()
{
    top = -1;
}

int is_empty()
{
    return top == -1;
}

int is_full()
{
    return top == MAX_SIZE - 1;
}

void pop()
{
    if(!is_empty()) 
    {
        top--;
    }   
}

void push(int
value) { if(!is_full()) stack[++top] = value; } void get_top() { if(is_empty()) printf("E\n"); else printf("%d\n", stack[top]); } int main() { int n; while(1) { if(scanf("%d", &n) == 1); if(n == 0) break; init(); int i; for(i = 0; i < n; i ++) { char
opt; if(scanf(" %c", &opt)); switch(opt) { case 'P': { int value; if(scanf("%d", &value)); push(value); } break
; case 'O': pop(); break; case 'A': get_top(); break; default: break; } } printf("\n"); } return 0; }

括號匹配問題,用STL

#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
stack<int> S;
//重點:棧中只存放左括號,一遇到右括號就出棧 
char str[110];
char ans[110];
int main()
{
    while(scanf("%s", str) != EOF)
    {
        int i;
        for(i = 0; i < strlen(str); i ++)
        {
            if(str[i] == '(')
            {
                S.push(i); //將其陣列下標放到堆疊中 
                ans[i] = ' ';
            }
            else if(str[i] == ')')
            {
                if(S.empty()) ans[i] = '?';
                else
                {
                    S.pop();
                    ans[i] = ' ';
                }
            }
            else ans[i] = ' ';
        }
        while(!S.empty())
        {
            ans[S.top()] = '$';
            S.pop(); 
        }
        puts(str);
        puts(ans);
    }
    return 0;
}