在数据结构中,栈是很重要的概念之一,但是C语言中却没有对应的数据结构。这大概是因为栈的结构过于简单。
通过顺序表,或者链表我们都可以实现一个栈。
在栈中,我们有入栈,出栈,取栈顶元素三种基本操作。除此之外,我们还应该对栈进行初始化,(初始化是编程中很重要的习惯,不爽不要编程)
#include #include #define 100 MAX;
typedef char StackType;
//extern StackType *data = (StackType*)malloc(sizeof(StackType));
typedef struct Stack{
StackType* st;
size_t size;
}Stack;
void StackInit(Stack* stack,StackType* base){//栈的初始化
if (stack == NULL)
return;
stack->size = 0;
stack->st = (StackType *)malloc((sizeof(StackType) * 100));
base = stack->st;
return;
}
在开始的时候,我想到的是用extern定义一个全局变量,然后用malloc开辟一块内存空间,但是在实际的过程中,我发现这个在外部定义全局变量会下降代码的可读性。让我们在实际使用时候忘记全局变量。所以最后我们采用在Init中对顺序表进行定义。
栈的入栈出栈,取栈顶元素:
Stack* StackDestroy(Stack* stack,StackType* base){//销毁
if (stack == NULL)
return NULL;
stack->size = 0;
free(base);
return NULL;
};
Stack* StackPush(Stack* stack,StackType value,StackType* base){//入栈
if (stack == NULL)
return NULL;
if (stack->size == MAX){
realloc(base,MAX*2);
}
stack->size++;
stack->st++;
*(stack->st) = value;
return stack;
};
Stack* StackPop(Stack* stack){//出栈
if (stack == NULL)
return NULL;
stack->size--;
stack->st--;
return stack;
}
StackType* StackTop(Stack* stack){//取栈顶元素
if (stack == NULL)
return NULL;
return stack->st;
}