顺序栈 :它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。
sqstack.h //顺序栈头文件(在内存中分配一段连续的存储空间存放入栈的相关数据)
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef int datatype; /*定义栈中数据元素的数据类型*/
typedef struct node{
datatype *data; /*用指针指向栈的存储空间*/
int maxlen; /*当前栈的最大元素个数,在这里单独列一个数据成员出来,方便程序员通过函数调用修改该值*/
int top; /*指示栈顶位置(数组下标)的变量*/
}sqstack; /*顺序栈类型定义*/
extern sqstack* stack_create(int len); //创建栈
extern int stack_empty(sqstack* s); //判断栈是否为空(0表示非空,1表示空)
extern int stack_full(sqstack* s); //判断栈是否为满(0表示非满,1表示满)
extern void stack_clear(sqstack* s); //清空栈
extern int stack_push(sqstack* s,datatype value); //入栈
extern datatype stack_pop(sqstack* s); //出栈
extern datatype stack_top(sqstack* s); // 获取栈顶的数据
extern void stack_free(sqstack *s); //释放栈
#endif
sqstack.c //顺序栈相关函数的实现方法
#include "sqstack.h"
sqstack* stack_create(int len) //创建栈
{
sqstack *s;
if((s=(sqstack *)malloc(sizeof(sqstack)))==NULL)
{
puts("malloc failed");
return NULL;
}
if((s->data=(datatype *)malloc(len*sizeof(datatype)))==NULL)
{
puts("malloc failed");
return NULL;
}
s->maxlen=len;
s->top=-1;
return s;
}
int stack_empty(sqstack* s) //判断栈是否为空(0表示非空,1表示空)
{
return (s->top==-1 ? 1:0);
}
int stack_full(sqstack* s) //判断栈是否为满(0表示非满,1表示满)
{
return (s->top==(s->maxlen-1) ? 1:0);
}
void stack_clear(sqstack* s) //清空栈
{
s->top = -1;
}
int stack_push(sqstack* s,datatype value) //入栈
{
if(s->top==s->maxlen-1){
puts("stack is full");
return -1;
}
s->data[s->top+1]=value;
s->top++;
return 1;
}
datatype stack_pop(sqstack* s) //出栈
{
s->top--;
return s->data[s->top+1];
}
datatype stack_top(sqstack* s) // 获取栈顶的数据
{
return(s->data[s->top]);
}
void stack_free(sqstack *s) //释放栈
{
free(s->data);
s->data=NULL;
free(s);
s=NULL;
}