main.c
#include <stdio.h>
#include "stack.h"
void main()
{
Stack * s = initStack();
push(s,1);
push(s,2);
push(s,3);
printf("%d\n",s->stack[0]);
printf("%d\n",s->top);
int x;
pop(s,&x);
pop(s,&x);
printf("%d\n",s->top);
clear(s);
printf("%d\n",s->top);
}
list.c
#include<stdio.h>
#include"stack.h"
#include<stdlib.h>
Stack* initStack()
{
Stack * s = (Stack*)malloc(sizeof(Stack));
s->top = -1;//表示栈中还没有元素
return s;
}
/*
功能:入栈
参数
@s 栈的头结点指针
@x 要入栈的数据
返回值
成功返回0
失败返回-1(栈已满)
*/
int push(Stack * s,sElemType x)
{
if(s->top >= MAX_ELEM_NUM-1)
{
return -1;
}
s->top++;
s->stack[s->top] = x;
return 0;
}
/*
功能:入栈
参数
@s 栈的头结点指针
@x 传入一个指针,用来保存栈顶元素
返回值
成功返回0
失败返回-1(栈为空)
*/
int pop(Stack * s,sElemType * x)
{
if(s == NULL || s->top == -1)
return -1;
*x = s->stack[s->top];
s->top--;
return 0;
}
void clear(Stack * s)
{
if(s == NULL)
return ;
s->top = -1;
}
void destory(Stack * s)
{
if(s == NULL)
return ;
s->top = -1;
free(s);
}
int gettop(Stack * s,sElemType * x)
{
if(s == NULL || s->top == -1)
return -1;
*x = s->stack[s->top];
return 0;
}
list.h
#ifndef __STACK_H__
#define __STACK_H__
typedef int sElemType;
#define MAX_ELEM_NUM 100 //栈中最大元素个数
struct Sqstack
{
sElemType stack[MAX_ELEM_NUM];//顺序栈
int top;//栈顶元素在stack数组中的下标
};
typedef struct Sqstack Stack;
Stack* initStack();
int push(Stack * s,sElemType x);
int pop(Stack * s,sElemType * x);
void clear(Stack * s);
void destory(Stack * s);
int gettop(Stack * s,sElemType * x);
#endif