#include <stdio.h>
#include <stdlib.h>
//定义函数结果状态码
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
//宏定义栈的空间大小
#define STACKSIZE 20
//定义数据类型
typedef int ElemType ;
//定义程序返回状态类型
typedef int State;
//顺序栈存储结构
struct _SqStack
{
ElemType data[STACKSIZE];//存放数据元素的数组
int top;//指向栈顶位置
};
typedef struct _SqStack *SqStack;
/*************************************************
Function: InitStack
Description: 初始化,构造空栈
Input: 顺序栈指针 SqStack stack
Output:
Return: 成功返回OK
Others: 空栈top为-1
*************************************************/
State InitStack(SqStack stack)
{
stack->top = -1;
return OK;
}
/*************************************************
Function: IsStackEmpty
Description: 判断栈是否为空
Input: 顺序栈指针 SqStack stack
Output:
Return: 为空返回TRUE,否则返回FALSE
Others:
*************************************************/
State IsStackEmpty(SqStack stack)
{
if(stack->top == -1)
return TRUE;
else
return FALSE;
}
/*************************************************
Function: IsStackFull
Description: 判断栈是否满
Input: 顺序栈指针 SqStack stack
Output:
Return: 为满返回TRUE,否则返回FALSE
Others:
*************************************************/
State IsStackFull(SqStack stack)
{
if(stack->top == STACKSIZE-1)
return TRUE;
else
return FALSE;
}
/*************************************************
Function: Push
Description: 入栈
Input: 顺序栈指针 SqStack stack
数据元素 ElemType e
Output:
Return: 成功返回OK,失败返回ERROR
Others:
*************************************************/
State Push(SqStack stack, ElemType e)
{
//判断栈是否满
if(stack->top == STACKSIZE-1)
{
printf("The stack is full!");
return ERROR;
}
//栈顶指针加1
stack->top++;
stack->data[stack->top] = e;
return OK;
}
/*************************************************
Function: Pop
Description: 出栈
Input: 顺序栈指针 SqStack stack
Output:
Return: 成功返回数据元素,程序退出
Others:
*************************************************/
ElemType Pop(SqStack stack)
{
//判断是否为空栈
if(stack->top == -1)
{
printf("The stack is empty!");
exit(EXIT_FAILURE);
}
//保存当前栈顶元素
ElemType e = stack->data[stack->top];
//栈顶指针减1
stack->top--;
return e;
}
/*************************************************
Function: GetTop
Description: 取栈顶元素
Input: 顺序栈指针 SqStack stack
Output:
Return: 成功返回数据元素,程序退出
Others:
*************************************************/
ElemType GetTop(SqStack stack)
{
//判断是否为空栈
if(stack->top == -1)
{
printf("The stack is empty!");
exit(EXIT_FAILURE);
}
return stack->data[stack->top];
}
/*************************************************
Function: ClearStack
Description: 把栈置空
Input: 顺序栈指针 SqStack stack
Output:
Return: 成功返回OK
Others:
*************************************************/
State ClearStack(SqStack stack)
{
stack->top = -1;
return OK;
}
/*************************************************
Function: GetLength
Description: 取得栈的长度
Input: 顺序栈指针 SqStack *stack
Output:
Return: 返回栈的长度
Others:
*************************************************/
int GetLength(SqStack stack)
{
return stack->top+1;
}
数据结构C语言实现之顺序栈
最新推荐文章于 2024-01-15 13:23:47 发布