赞
踩
栈的特点是先入后出,后进先出。
- //静态栈
-
- #define 10 N
- #define int STDataType
-
- typedef struct ST{
- STDataType a[N];
- int top;//栈顶元素
- }Stack;
- //动态栈
- #define int STDataType
-
- typedef struct ST {
- STDataType* _a;
- int _top;//栈顶元素
- int _capacity;//最大容量
- }Stack;
- //初始化栈
- void StackInit(Stack* pst)
- {
- assert(pst);
- pst->_a = NULL;
- pst->_top = 0;
- pst->_capacity = 0;
- }
- //入栈
- void StackPush(Stack* pst, STDataType x)
- {
- assert(pst);
- if (pst->_top == pst->_capacity)
- {
- STDataType newcapacity = pst->_capacity == 0 ? 4 : (pst->_capacity * 2);
- STDataType* temp = (STDataType*)realloc(pst->_a, sizeof(STDataType) * newcapacity);
- if (temp == NULL)
- {
- printf("realloc fail\n");
- exit(-1);
- }
- pst->_a = temp;
- pst->_capacity = newcapacity;
- }
- pst->_a[pst->_top] = x;
- pst->_top++;
- }

- //出栈
- void StackPop(Stack* pst)
- {
- assert(pst);
- assert(pst->_top > 0);
- pst->_top--;
- }
- //获取栈顶元素
- STDataType StackTop(Stack* pst)
- {
- assert(pst);
- assert(pst->_top>0);
- return pst->_a[pst->_top-1];
- }
- //出栈
- void StackPop(Stack* pst)
- {
- assert(pst);
- assert(pst->_top > 0);
- pst->_top--;
- }
- //判断栈是否为空,是返回1,非空返回0
- bool StackEmpty(Stack* pst)
- {
- assert(pst);
- if (pst->_top == 0)
- return true;
- else
- return false;
- }
- //打印栈
- void StackPrint(Stack* pst)
- {
- while (!StackEmpty(pst))
- {
- printf("%d\n", StackTop(pst));
- StackPop(pst);
- }
- }
- //销毁栈
- void StackDestory(Stack* pst)
- {
- assert(pst);
- free(pst->_a);
- pst->_a = NULL;
- pst->_top = pst->_capacity = 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。