[資料結構-棧]棧的基本操作&括號匹配
阿新 • • 發佈:2019-02-18
堆疊的三種實現方式
用靜態資料實現
#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;
}