/*本程序主要是实现以下功能
进栈、 出栈、 判空、 判满、 清空、 获取栈元素的长度、 栈顶元素
销毁、 创建
*/
/* main.c */
#include<stdio.h>
#include"sstack.h"
int main(void)
{
stack mystack = CreateStack();
PushStack(mystack,11);
PushStack(mystack,22);
PushStack(mystack,33);
ClearStack(mystack);
while(!StackIsEmpty(mystack)){
printf("pop:%d\n",PopStack(mystack));
}
PushStack(mystack,22);
PushStack(mystack,33);
getStack(mystack);
while(!StackIsEmpty(mystack)){
printf("pop:%d\n",PopStack(mystack));
}
return 0;
}
/* sstack.c */
#include<stdio.h>
#include<stdlib.h>
#include"sstack.h"
// 创建一个栈
stack CreateStack(void)
{
stack s = malloc(sizeof(Snode));
if ( NULL == s )
{
printf("malloc error\n");
return NULL;
}
s->top = -1;
return s;
}
// 判断栈是否满
int StackIsFull(stack S)
{
if ( S->top == MAX-1 )
{
return TRUE;
}
else
{
return FALSE;
}
}
// 进栈
data_t PushStack(stack S,data_t val)
{
if ( TRUE == StackIsFull(S) )
{
printf("stack is full\n");
return ERROR;
}
S->top++;
S->a[S->top] = val;
return S->a[S->top];
}
// 判断栈是否为空
int StackIsEmpty(stack S)
{
if(S->top == -1)
{
return TRUE;
}
else {
return FALSE;
}
}
// 出栈
data_t PopStack(stack S)
{
if ( StackIsEmpty(S) )
{
printf("stack is empty\n");
return ERROR;
}
data_t val = S->a[S->top];
S->top--;
return val;
}
// 清空栈
int ClearStack(stack S)
{
S->top = -1;
}
// 取栈顶元素
data_t getStack(stack S)
{
printf("%d\n",S->a[S->top]);
return S -> a[S->top];
}
// 获取栈元素长度
int GetStackLenth(stack S)
{
int len = S->top + 1;
return len;
}
// 销毁
void Destroy(stack S)
{
free(S);
}
/* sstack.h */
#ifndef _SSTACK_H
#define _SSTACK_H
#define MAX 10
#define TRUE 1
#define FALSE 0
#define ERROR -1
#define OK 1
typedef int data_t;
struct snode{
data_t a[MAX];
int top; //记录栈顶元素下标
};
typedef struct snode Snode;
typedef struct snode * stack;
stack CreateStack(void); // 创建空栈
int StackIsFull(stack S); // 判断栈是否满
data_t PushStack(stack S,data_t val); // 进栈
int StackIsEmpty(stack S); // 判断栈是否为空
data_t PopStack(stack S); // 出栈
int ClearStack(stack S); // 清空栈
data_t getStack(stack S); // 取栈顶元素
void Destroy(stack S); // 销毁
int GetStackLenth(stack S); // 获取栈元素长度
#endif