栈
1.栈:只能在一端进行插入和删除的线性表
特点:先进后出,后进先出
2.栈分为顺序栈和链式栈
顺序栈
逻辑结构:线性结构
存储结构:顺序存储
操作:入栈 出栈 销毁
1、创建顺序栈,定义结构体
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
//定义结构体
typedef struct stack
{
datatype *data; //存放顺序栈的地址
int maxlen; //开辟顺序栈存放数据的限制
int tap; //栈针
}seqstack_t;
//创建空的顺序表
seqstack_t *createEmSeqStack(int len)
{
seqstack_t *p=(seqstack_t *)malloc(sizeof(seqstack_t));
if(p==NULL)
return NULL;
p->data=(datatype *)maloc(sizeof(datatype)*len);
if(p->data==NULL)
return NULL;
p->maxlen=len;
p->top=-1;
return p;
}
2.入栈操作
通过对栈针的移动完成入栈
int insertSeqStack(seqstack_t *p,datatype data)
{
if(isFullstack(p))
return -1;
p->top++;
p->data[p->top]=data;
return 0;
}
3.判断栈是否满
int isFullstack(seqstack_t *p)
{
return p->top+1 == p->maxlen;//1满 0不满
}
4.出栈操作
datatype outSeqStack(seqstack_t *p)
{
datatype temp; //定义中间量来存储返回数据
// 若直接返回则无法完成栈针移动
if(isEmptySeqStack(p))
return -1;
temp=p->data[p->top];
p->top--;
return temp;
}
5.判断是否为空
int isEmptySeqStack(seqstack_t *p)
{
return p->top == -1;//1空 0非空
}
6.销毁栈
void clearSeqStack (seqstack_t **p)//通过二级指针来完成
{
free((*p)->data);
(*p)->data=NULL;
free(*p);
*p-=NULL;
}