顺序栈代码
main.c
#include <stdio.h>
#include "sqStack.h"
int main()
{
Stack *s = initStack();
sElemType data;
while(1)
{
scanf("%d",&data);
if(data == 0)
{
break;
}
push(s, data);
}
sElemType x;
while(! isEmtpy(s))
{
if(pop(s,&x) == 0)
{
printf("%d ",x);
}
}
destroyStack(s);
return 0;
}
sqStack.c
#include<stdio.h>
#include<stdlib.h>
#include"sqStack.h"
//本.c文件实现顺序栈的基本功能函数
/*
功能:初始化一个空栈
参数:
无
返回值
失败返回NULL
成功返回栈的头结点的地址
*/
Stack * initStack()
{
Stack * s = (Stack *)malloc(sizeof(Stack));
if(s == NULL)
{
return NULL;
}
s->top = -1;//现在是一个空栈,栈顶元素不存在,所以给一个不存在的下标
return s;
}
/*
功能:清空一个栈
参数:
@s 栈的头结点地址
返回值
成功返回0
失败返回-1
*/
int clearStack(Stack * s)
{
if(s == NULL)
return -1;
s->top = -1;
return 0;
}
int destroyStack(Stack * s)
{
if(s == NULL)
return -1;
s->top = -1;
free(s);
return 0;
}
int push(Stack * s ,sElemType x)
{
if(s == NULL || s->top == MAX_ELEM_NUM-1)//栈不存在,或者满了
return -1;
s->stack[s->top+1] = x;
s->top++;
return 0;
}
int pop(Stack * s,sElemType * x)
{
if(s == NULL || s->top == -1)//栈不存在,或者为空
return -1;
*x = s->stack[s->top];//保存栈顶元素到x指向的空间
s->top --;//出栈
return 0;
}
int isEmtpy(Stack * s)
{
if(s == NULL || s->top == -1)//栈不存在或者为空
return 1;
return 0;
}
int getTop(Stack * s,sElemType * x)
{
if(s == NULL || s->top == -1)//栈不存在,或者为空
return -1;
*x = s->stack[s->top];//保存栈顶元素到x指向的空间
//s->top --;//出栈
return 0;
}
sqStack.h
#ifndef __SQ_STACK_H__
#define __SQ_STACK_H__
typedef int sElemType;
#define MAX_ELEM_NUM 100
struct Sqstack
{
sElemType stack[MAX_ELEM_NUM];//顺序栈
int top;//栈顶元素在stack数组中的下标
};
typedef struct Sqstack Stack;//取别名
/*
功能:初始化一个空栈
参数:
无
返回值
失败返回NULL
成功返回栈的头结点的地址
*/
Stack * initStack();
/*
功能:清空一个栈
参数:
@s 栈的头结点地址
返回值
成功返回0
失败返回-1
*/
int clearStack(Stack * s);
/*
功能:销毁一个栈
参数:
@s 栈的头结点地址
返回值
成功返回0
失败返回-1
*/
int destroyStack(Stack * s);
/*
功能:入栈
参数:
@s 栈的头结点地址
@x 待入栈的数据
返回值:
成功返回0
失败返回-1
*/
int push(Stack * s ,sElemType x);
/*
功能:出栈
参数:
@s 栈的头结点地址
@x 一个指针,指向的内存空间用来保存待出栈元素
返回值:
成功返回0
失败返回-1
*/
int pop(Stack * s,sElemType * x);
/*
判断栈s是否为空,为空返回1,不为空返回0
*/
int isEmtpy(Stack * s);
/*
功能:获取栈顶元素
参数:
@s 栈的头结点地址
@x 一个指针,指向的内存空间用来保存栈顶元素
返回值:
成功返回0
失败返回-1
*/
int getTop(Stack * s,sElemType * x);
#endif