c语言模拟顺序储存架构的栈
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
#define STACK_SIZE 50
/**
* @name 模拟栈操作
* @author 群
* @version 顺序储存栈
* @ps:初始:栈顶指针-1,每添加一个元素top增1,减少一个元素top减1,top始终指向栈顶元素;
栈空:top=-1;栈满:top=max-1;栈长度:top+1
*/
typedef struct
{
int elem[STACK_SIZE];/* 用于存放栈中元素的一维数组 */
int top;/* 用来存放栈顶元素的下标 */
} SeqStack;
void InitStack(SeqStack *S)//初始化栈
{
S->top = -1; /* top为-1表示空栈 */
}
int IsEmpty(SeqStack *S)//判断栈空
{
if (S->top == -1)
return TRUE;
else
return FALSE;
}
int IsFull(SeqStack *S)//栈为满吗
{
if (S->top == STACK_SIZE - 1)
return TRUE;
else
return FALSE;
}
int Push(SeqStack *S, int value)//插入元素
{
if (IsFull(S) == TRUE) {
// 栈已满
return FALSE;
}
// 修改栈顶元素下标
S->top++;
S->elem[S->top] = value;
return TRUE;
}
void Pop(SeqStack *S)//弹出元素
{
if(IsEmpty(S) == TRUE) // 栈为空
{
return ;
}
S->top--; // 修改栈顶元素下标
}
int GetTop(SeqStack *S)//读顶端的元素
{
int top_num;
if(IsEmpty(S) == TRUE)
{
return FALSE;
}
top_num = S->elem[S->top];
return top_num;
}
int main()
{
SeqStack stack;
InitStack(&stack);//初始化
Push(&stack,2);
Push(&stack,3);
Push(&stack,4);
Pop(&stack);
int a =GetTop(&stack);
return 0;
}