作者:MiTu_-_
基本数据结构
二、栈
一种后进先出(LIFO,last in first out)的线性表。
//名称:Stack()
//功能:栈,用top指向元素数组的下标位置
//说明:S.top 指向栈顶元素
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define STACK_SIZE 1000 //初始分配量
typedef int Status;
//栈定义
typedef char ST; //StackElemType
typedef struct {
ST * data;
int top;
} SqStack, * PSqStack;
//栈操作
Status Init_S(PSqStack S);
Status Empty_S(SqStack S);
Status Full_S(SqStack S);
Status Top_S(SqStack S, ST * e);
Status Push(PSqStack S, ST e);
Status Pop(PSqStack S, ST * e);
int Length_S(SqStack S);
int main(void)
{
SqStack S;
Init_S(&S);
return 0;
}
Status Init_S(PSqStack S)
{
S->data = (ST *)malloc(STACK_SIZE * sizeof(ST));
if (!S->data)
return ERROR;
S->top = -1;
return OK;
}
Status Empty_S(SqStack S)
{
if (S.top == -1)
return OK;
else
return ERROR;
}
Status Full_S(SqStack S)
{
if (S.top == STACK_SIZE - 1)
return OK;
else
return ERROR;
}
Status Top_S(SqStack S, ST * e)
{
if (Empty_S(S))
return ERROR;
else
*e = S.data[S.top];
return OK;
}
Status Push(PSqStack S, ST e)
{
if (Full_S(*S))
return ERROR;
else
S->data[++S->top] = e;
return OK;
}
Status Pop(PSqStack S, ST * e)
{
if (Empty_S(*S))
return ERROR;
else
*e = S->data[S->top--];
return OK;
}
int Length_S(SqStack S)
{
return S.top - 1;
}