#include <stdlib.h> #include <stdio.h> #define LIST_SIZE 100 #define LIST_INCREASE_SIZE 10 typedef char ElementType; typedef struct { ElementType *base; ElementType *top; int stacksize; }Stack; int InitStack(Stack &S) { // 初始化栈 S.base = (ElementType*)malloc(LIST_SIZE * sizeof(ElementType)); if(!S.base) exit(0); S.top = S.base; S.stacksize = LIST_SIZE; return 1; }//InitStack int Push(Stack &S, ElementType e) { // 压入栈顶一个元素 if(S.top - S.base >= S.stacksize) { S.base = (ElementType*)realloc(S.base, (LIST_SIZE + LIST_INCREASE_SIZE) * sizeof(ElementType)); if(!S.base) exit(0); S.top = S.base + S.stacksize; S.stacksize += LIST_INCREASE_SIZE; } *S.top = e; S.top++; return 1; }//Push int Pop(Stack &S, ElementType &e) { // 弹出一个元素 if(S.top == S.base) return 0; S.top--; e = *S.top; S.stacksize--; return 1; }//Pop int GetTop(Stack &S, ElementType &e) { // 取头部一个元素 if(S.top == S.base) return 0; e = *(S.top - 1); return 1; }//GetTop bool StackEmpty(Stack &S) { // 判断栈是否为空 if(S.top == S.base) return true; return false; }//StackEmpty void main(void) { Stack s; InitStack(s); Push(s, 'a'); Push(s, 'b'); char c; Pop(s, c); printf("弹出元素:%c/n", c); GetTop(s, c); printf("顶部元素:%c/n", c); printf("%d", StackEmpty(s)); }