栈在暑假的时候接触过了,当时还写了个计算器,用的中缀表达式后缀表达式的栈操作。
http://www.cnblogs.com/itlqs/p/4749998.html
今天按照算法导论上的讲解规范了一下代码。主要是栈的初始化、判断空栈、入栈、出栈、遍历栈。
#include<stdio.h> #define MAXTOP 10 struct _stack { int top; int num[MAXTOP+1]; }s; void init(struct _stack &S) { S.top=0; } int sempty(struct _stack &S) { if (S.top==0) return 1; else return 0; } void push(struct _stack &S,int n) { if (S.top==MAXTOP) { printf("栈顶溢出,压栈失败!\n"); } else { S.top++; S.num[S.top]=n; } } int pop(struct _stack &S) { if (S.top==0) { printf("栈为空,弹出失败!\n"); } else { S.top--; return S.num[S.top+1]; } } void showstack(struct _stack S) { while (!sempty(S)){ int k=pop(S); printf("|%d|\n",k); } printf("| |\n"); printf(" - \n"); } int main() { int n; printf("1:初始化栈;2:入栈;3:出栈;4:退出。\n"); while (1) { int k; scanf("%d",&k); switch(k) { case 1:init(s); break; case 2:scanf("%d",&n); push(s,n); break; case 3:pop(s); break; case 4:return 0; } showstack(s); } return 0; }
明天用链表写一写。
时间: 2024-12-22 05:32:39