#include <stdio.h> #include <stdlib.h> typedef char DataType; #define StackSize 100 //栈的定义 typedef struct { DataType stack[StackSize]; int top;//指示栈顶指针 }SqStack; //初始化栈为空栈 void InitStack(SqStack &s) { s.top = -1;//设置栈顶指针为-1 } //判断栈顶为空 bool StackEmpty(SqStack s) { if (s.top == -1) return true; else return false; } //读取栈顶元素 bool GetTop(SqStack s, DataType &e) { if (s.top == -1) { return false;//空栈,无法继续操作 } else { e = s.stack[s.top];//读取到栈顶元素 return true; } } //进栈操作 bool PushStack(SqStack &s, DataType e) { //先判断元素是否已经满了 if (s.top >= StackSize-1) { return false; } else { s.top += 1;//栈顶指针增加1 s.stack[s.top] = e;//新元素e进栈 return true; } } //出栈操作--将栈顶元素出栈,并将值赋值给e bool PopStack(SqStack &s, DataType &e) { if (s.top == -1) { return false;//空栈 } else { e = s.stack[s.top];//将元素赋值给e s.top -= 1;//栈顶指针减少1 return true; } } //求栈的长度 int StackLength(SqStack s) { return s.top+1; } //清空栈 void ClearStack(SqStack s) { s.top = -1;//函数运行结束后系统会自动回收内存 } int main() { SqStack s; DataType a[] = { ‘a‘,‘b‘,‘c‘,‘d‘,‘e‘ }; DataType e; //初始化栈 InitStack(s); //进栈操作 for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) { if (PushStack(s, a[i]) == false) { //栈满无法进栈 return false; } } //出栈操作 printf("出栈的元素是:"); if (PopStack(s, e) == true) { printf("%4c", e); } if (PopStack(s, e) == true) { printf("%4c\n", e); } printf("当前栈顶元素是:"); if (GetTop(s, e) == true) { printf("%4c\n", e); } if (PushStack(s, ‘f‘) == false) { //栈已满 return false; } if (PushStack(s, ‘g‘) == false) { //栈已满 return false; } /* 由于用s.top = -1来判断是否为空以及初始化,所以计算长度时要多加一个1 */ printf("当前栈中的元素个数:%d\n", StackLength(s)); printf("元素出栈的序列是:"); while (!StackEmpty(s)) { PopStack(s, e); printf("%4c ", e); } printf("\n"); getchar(); return 0; }
原文:https://www.cnblogs.com/imxiaodi/p/13783386.html