栈是一种后进先出的线性表,他要求只在表尾进行删除和插入的工作。
栈的定义:定义一个结构体,里面的成员有:
1栈顶指针;
2栈底指针;
3栈的最大容量;
typedef struct node
{
int *base; //栈底指针,数据类型可以是其他,不一定是int
int *top; //栈顶指针,数据类型可以是其他,不一定是int
int stacksize; //栈的最大容量
}Stack;
创建一个栈:
1在内存中开辟一段连续的内存空间作为栈空间,将首地址赋给栈底指针;
2初始:令栈底和栈顶相同;
3设置栈的最大容量;
代码:栈中存放的数据类型为int
#define STACK_INIT_SIZE 100
void initStack(Stack*s)
{
s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(s->base==NULL) exit(0);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
}
入栈操作:
1如果栈满,追加空间;
2重新设置栈的最大容量;
3放入数据;(栈顶指针指向的位置);
4栈顶指针递增1;
void Push(Stack *s,int item)
{
if((s->top-s->base)>=s->stacksize)
{ /*栈满,追加空间*/
s->base=(int *)malloc((s->stacksize+STACK_INCREMENT)*sizeof(int));
s->top=s->base+s->stacksize; //调整栈顶指针
s->stacksize+=STACK_INCREMENT; //重新设置栈的最大容量
}
*(s->top)=item; //放入数据
s->top++; //栈顶指针自增1
}
出栈操作:
1判断是否栈空,是则返回;
2栈不空,则栈顶指针自减1,取出指针指向的内容;
int Pop(Stack*s) //该栈存储int类型数据
{ int item;
if(s->top==s->base) //判断是否栈空,是则返回
{return NULL;}
s->top--; //指针自减1
item=*(s->top); //取出指针指向的内容
return item;
}