数据结构学习-----栈和队列
栈和队列
栈和队列的定义和特点
- 栈和队列是两种常用、重要的线性结构,从数据结构角度上来看也是线性表。
- 栈和队列是限定插入和删除只能在表的“端点”进行操作的线性表。
栈:是限定仅为表尾进行插入或者删除的线性表。因此,对栈来说,表尾端有其特殊含义,成为栈顶(top),相应的,表头端称为栈底(bottom)。不含元素的空表称为空栈。栈是一种后进先出的线性表;
与栈相反,队列(queue)是一种先进先出(first in first out,缩写为FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。
栈的表示和实现
栈的插入操作,叫做进栈,也称压栈、入栈。
栈的删除操作,叫作出栈,也有的叫弹栈。
栈的顺序存储结构
我们定义一个top变量来指示栈顶元素在数组中的位置,类似于小时候学过的油游标卡尺,它的来回移动就意味着栈顶top可以变大变小。当栈存在一个元素是,top等于0,因此通常把空栈的判断条件定为top等于-1.
栈的结构定义
typedef int SElemType;
typedef struct
{
SElemTye data[MAXSIZE];
int top; /* 用于栈顶指针 */
}SqStack;
栈的顺序存储结构——进栈操作
对于栈的插入,即进栈操作(如下图所示):
代码如下:
/* 插入元素e为新的栈顶元素 */
Status Push(SqStack *s, SElemType e)
{
if(s->top == MAXSIZE -1) // 栈满
{
return ERROR;
}
s->top++; /* 栈顶指针加一 */
s->data[s->top] = e; /* 将新插入元素赋值给栈顶空间 */
}
栈的顺序存储结构——出栈操作
出栈操作pop
代码如下:
/* 若栈不空