栈和栈的应用
Posted 陌上柳絮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和栈的应用相关的知识,希望对你有一定的参考价值。
#include <stdio.h> #include<stdlib.h> #define MAXSIZE 110 #define ok 1 #define error 0 typedef int SElemType; typedef int Status; ///顺序栈类型的定义 typedef struct { SElemType data[MAXSIZE]; int top; }SeqStack; ///顺序栈实现的基本操作 void InitStack(SeqStack &S)///初始化 { S.top=-1; } ///判断栈是否已满,若满,则返回1,否则返回0 Status StackFull(SeqStack S) { return S.top==MAXSIZE-1; } ///判断栈是否为空,若为空,则返回1,否则返回0 Status StackEmpty(SeqStack S) { return S.top==-1; } Status StackPush(SeqStack &S, SElemType e) { if(S.top==MAXSIZE-1) return error; S.top++; S.data[S.top]=e; return ok; } Status StackPop(SeqStack &S, SElemType *e)///出栈,将出栈元素赋值给e { if(StackEmpty(S)) { printf("Stack is Empty.UnderFlow!\n"); return error; } *e=S.data[S.top]; S.top--; return ok; } Status GetTop(SeqStack &S, SElemType *e) { if(StackEmpty(S)) { printf("Stack is Empty.UnderFlow!\n"); return error; } *e=S.data[S.top]; return ok; } ///实现n个数的逆序输出 int main() { int n, a, num; SeqStack S; while(~scanf("%d", &n)) { InitStack(S); for(int i=0; i<n; i++) { scanf("%d", &num); if(StackFull(S)) { printf("栈已满,入栈失败!\n"); break; } else StackPush(S, num); } while(!StackEmpty(S)) { StackPop(S, &a); printf("输出出栈元素:%d\n", a); } } return 0; }
#include <stdio.h> #define MAXSIZE 100 #define ok 1 #define OVERFLOW -1 #define true 1 #define false 0 #define error 0 typedef char SElemType; typedef int Status; typedef struct { SElemType data[MAXSIZE]; int top; } SeqStack; ///判断栈是否为空,若为空,则返回1,否则返回0 Status StackEmpty(SeqStack S) { return S.top==-1; } ///判断栈是否已满,若满,则返回1,否则返回0 Status StackFull(SeqStack S) { return S.top==MAXSIZE-1; } Status StackPush(SeqStack &S, SElemType e) { if(S.top==MAXSIZE-1) return error; S.top++; S.data[S.top]=e; return ok; } ///顺序栈实现的基本操作 void InitStack(SeqStack &S)///初始化 { S.top=-1; } Status StackPop(SeqStack &S)///出栈,将出栈元素赋值给e { if(StackEmpty(S)) { printf("Stack is Empty.UnderFlow!\n"); return error; } S.top--; return ok; } Status GetTop(SeqStack &S, SElemType *e) { if(StackEmpty(S)) { printf("Stack is Empty.UnderFlow!\n"); return error; } *e=S.data[S.top]; return ok; } int main() { SElemType ch, e; int i, f=0; SeqStack S; char str[110]; printf("输入字符串:\n"); scanf("%s",str); InitStack(S); StackPush(S, str[0]); for(i=1; str[i]!=‘\0‘; i++) { ch = str[i]; if(ch == ‘(‘ || ch == ‘[‘ || ch==‘{‘) StackPush(S, ch); else { GetTop(S, &e); if( ( e == ‘(‘ && ch == ‘)‘ ) || ( e == ‘[‘ && ch == ‘]‘ ) || ( e == ‘{‘ && ch == ‘}‘ )) StackPop(S); else { f=1; printf("NO\n"); break; } } } if(f==0) printf("YES\n"); getchar(); return 0; }
以上是关于栈和栈的应用的主要内容,如果未能解决你的问题,请参考以下文章