栈的定义
栈是限制仅在表的一端进行插入和删除运算的线性表。
top:插入、删除的这一端。
bottom:另一端
top=0表示栈空,top=m表示栈满。
顺序栈的基本运算
置栈空
void InitStack()
{
node *s;
s->top=-1;
}
判栈空
int StackEmpty()
{
node*s;
return s->top==-1;
}
判栈满
int StackFull()
{
node*s;
return s->top==StackSize-1;
}
进栈
void Push()
{
node*s;
s->data[++s->top]=x;
}
退栈
char Pop()
{
node*s;
if(StackEmpty(s)) Error("Stack underflow");
return s->data[--s->top];
}
取栈顶元素
char StackTop()
{
node*s;
if(StackEmpty(s)) Error("Stack is empty");
return s->data[s->top];
}
栈的链式存储
struct Node{
char data;
struct *StackNode next;
};
struct LinkStack
{
StackNode *top;
}
入栈
{
node *s;
s->top++;
s->data[s->top] = a[];
}
出栈操作
{
if (S->top == -1)
{
return ERROR;
}
S->top--;
}
两栈共享空间
两个相同类型的栈,分别把数组的两端作为栈底,从两端向中间延伸。定义两者的栈顶分别为top1,top2,当top1+1 = top2时栈满。
队列
队列是只允许在一端进行插入操作,另一端进行删除操作的线性表。
先进先出,允许插入的一端为队尾,允许删除的一端为队头
队列的链式存储结构
就是线性表的单链表,只能尾进头出,队头指针指向链表队列的头结点,队尾指针指向终端结点,空队列时,队头指针和队尾指针都指向头结点。
链队列的入队操作就是在链表尾部插入结点,出队操作就是将头结点的后继结点出队,将头结点的后继改为原后继的后继,若链表除头结点外只有一个元素时,需要将w指向头结点。