栈(Stack),也称为堆栈,是一种特殊的线性表,其元素的关系是线性关系,其特殊型体现在只能在一端插入和删除元素。栈表现后进先出(LIFO)的特点。
栈的基本运算如下:
initStack(Stack &stack)
:初始化栈isEmpty(stack)
:判断栈是否为空top(Stack stack, StackType& elem)
:取栈顶元素push(Stack &stack,StackType& elem)
:进栈pop(Stack &stack,StackType& elem)
:出栈distoryStack(&stack)
:销毁栈
如下是栈的C语言实现:
#include <stdio.h>
#include <stdlib.h>
#define INIT_SIZE 5 //初始大小
#define INCREA_SIZE 5 //分配增量
typedef int StackType;
typedef struct
{
StackType *elem;
int size;//栈大小
int length;//数据长度
}Stack;
//初始化栈
int initStack(Stack &stack){
stack.elem=(StackType*)malloc(sizeof(Stack)*INIT_SIZE);//分配初始内存空间
if(!stack.elem){
printf("内存分配失败。\n");
return -1;
}
stack.length=0;//设置数据长度和栈大小
stack.size=INIT_SIZE;
return 1;
}
//取栈顶元素
int top(Stack stack, StackType& elem) {
if (stack.length == 0)
return 0;
elem = stack.elem[stack.length - 1];
printf("%d\n", elem);
return 1;
}
//出栈
StackType pop(Stack &stack,StackType& elem){
if(stack.length==0){
printf("栈为空。\n");
return -1;
}
elem=stack.elem[--stack.length]//栈顶指针下移
printf("%d\n", elem);
}
StackType push(Stack &stack,StackType m){
if(stack.length==stack.size){
printf("追加栈空间。\n");
StackType* extra=(StackType*)realloc(stack.elem, (stack.size+INCREA_SIZE)*sizeof(StackType));
if(!extra){
printf("追加新的空间失败。\n");
return -1;
}
stack.elem=extra;
stack.size+=INCREA_SIZE;//更新栈大小
}
stack.elem[stack.length++]=m;
return 1;
}
int main(int argc, char const *argv[])
{
/* code */
return 0;
}