今天有点忙,就少更点内容吧。
今天学栈。
栈是限定仅在表尾进行插入和删除操作的线性表。
栈有入栈和出栈两种操作,遵照先入后出原则,就像弹匣中的子弹一样。
单栈,有最大容量和一个栈顶,每个栈空间容纳一个元素,栈顶就是最后进入的元素,也是表尾
#include <stdio.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType data[MAXSIZE];
int top;
}SqStack;
入栈/压栈/进栈
先判断是否满栈,如未满,则栈顶向上移一位,将数据存入新栈顶
出栈/弹栈
先判断是否满栈,如未满,则将栈顶数据传给指针,栈顶向下移一位。
注意入栈和出栈的操作顺序有差异。
Status Push(SqStack *s, SElemType e)
{
if(s->top==MAXSIZE-1)
return ERROR;
s->top++;
s->data[s->top]=e;
return OK;
}
Status Pop(SqStack *s, SElemType *e)
{
if(s->top==-1)
return ERROR;
*e=s->data[s->top];
s->top--;
return OK;
}
两栈共享空间:
两个栈合并,有两个栈顶,一个从0开始加,一个从最大值开始减。
typedef struct
{
SElemType data[MAXSIZE];
int top 1;
int top 2;
}SqDoubleStack;
共享栈入栈:
由于现在有两个栈顶,判断满栈的方法不同。
判断栈顶1加1是否等于栈顶2.
所以用此方法判断是否满栈,再判断要入哪一个栈(StackNumber),接着栈顶上移(相对中心),数据赋值。
Status DPush(SqDoubleStack *s,SElemType e,int StackNumber)
{
if(s->1+1==s->2)
return ERROR;
if(StackNumber==1)
s->data[++s->top1]=e;
else if(StackNumber==2)
s->data[--s->top2]=e;
return OK;
}
共享栈出栈
先判断要出哪一个栈,再判断是否栈为空,
之后,先取数据再栈顶下移(相对中心)
Status DPop(SqDoubleStack *s,SElemType *e,int StackNumber)
{
if(StackNumber==1)
{
if(s->top1==-1)
return ERROR;
*e=s->data[s->top1--]
}
else if(StackNumber==2)
{
if(s->2==MAXSIZE)
return ERROR;
*e=s->data[s-top>2++];
}
return OK;
}
——————————————————————————————————————————————————
坚持写博客的第三天,上学真忙啊,简直是忙里偷闲
每日一名言:
希望之花,盛开在梦想的道路上。
The flower of hopeness is blessing on the road of dream.