栈(stack)又名堆栈,它是一种运算受限的线性表。它只能在表尾进行插入和删除操作,这一端称之为栈顶,另一端称为栈尾。
1.栈的特征
栈是一种先进后出、只能在栈顶操作的线性表。
2.栈的分类
分为顺序栈和链式栈。
下面介绍顺序栈的操作
3.顺序栈
它是使用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶元素的位置。
3.1顺序栈的基本操作
3.1.1顺序栈的结构定义
//定义元素的数据类型
typedef int data_type;
//定义顺序栈的数据类型
typedef struct stack
{
data_type arr[N];
int top;//表示栈顶元素下标
}Stack;
3.1.2创建栈
Stack *createStack(void)
{
//1.定义一个结构体指针变量,接受malloc函数的返回值
Stack *pStack = NULL;
pStack = (Stack *)malloc(sizeof(Stack));
if(NULL == pStack)
{
perror("malloc error");
return NULL;
}
memset(pStack,0,sizeof(Stack));
//将下标置为-1
pStack->top = -1;
return pStack;
}
3.1.3入栈
int EnStack(Stack *pStack,data_type item)
{
//1.入参判断
if(NULL == pStack)
{
return STACKNULL;
}
//2.判断是否栈满
if(pStack->top == N-1)
{
return FULL;
}
//3.下标+1
pStack->top++;
//4.将新值入栈
pStack->arr[pStack->top] = item;
return OK;
}
3.1.4出栈
int OutStack(Stack *pStack,data_type *pData)
{
//1.入参判断
if(NULL == pStack)
{
return STACKNULL;
}
//2.判断栈是否为空
if(pStack->top == -1)
{
return EMPTY;
}
//3.保存要出战的数据
*pData = pStack->arr[pStack->top];
//top--
pStack->top--;
return OK;
}
4.程序运行结果