C语言 栈

247 阅读1分钟

全局变量

  • gl_Top:栈顶指针
  • gl_Bottom:栈底指针
  • gl_stackSize:栈高度
  • gl_maxSize:最大栈高度

函数

  • initStack(int maxSize):初始化栈
  • push(int value):压栈
  • pop():出栈
  • getTopValue():获取栈顶元素值
  • getStackSize():获取栈高度

源文件代码

#include <stdlib.h> #include <stdio.h> #include "MyStack.h"

StackNode* gl_Top; StackNode* gl_Bottom; int gl_stackSize = 0; int gl_maxSize = 0;

void initStack(int maxSize) {

while (gl_stackSize>0) {
	pop();
}
gl_err_stack = 0;
gl_maxSize = maxSize;

} void push(int value) {

if (gl_stackSize >= gl_maxSize)
	return;

StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->value = value;
if (gl_stackSize == 0) {
	gl_Bottom = newNode;
	gl_Top = newNode;
	newNode->down = newNode;
	gl_stackSize++;
	return;
}

gl_Top->up = newNode;
newNode->down = gl_Top;
gl_Top = newNode;
gl_stackSize++;

} void pop() {

if (gl_stackSize <= 0)
	return;
if (gl_stackSize == 1) {
	free(gl_Top);
	gl_Top = gl_Bottom = NULL;
	gl_stackSize = 0;
	return;
}
gl_Top = gl_Top->down;
free(gl_Top->up);
gl_stackSize--;

} int getTopValue() {

return gl_Top->value;

} int getStackSize() {

return gl_stackSize;

}

头文件代码

typedef struct StackNode{ int value; struct StackNode* up; struct StackNode* down; }StackNode;

  • void initStack(int maxSize);
  • void push(int value);
  • void pop();
  • int getTopValue();
  • int getStackSize();