栈
栈的定义
栈是一种只能在一端进行插入或删除操作的线性表。 表中允许进行插入,删除操作的一端称为栈顶,表的另一端称为栈底。
当栈中没有数据元素时称为空栈,栈的插入操作通常称为入栈若进栈,栈的删除操作通常称为出栈或退栈。
栈的主要特点是后进先出,即后进栈的先出栈,栈也称为后进先出表。
栈的顺序存储结构及其基本运算的实现
采用顺序存储结构的栈称为顺序栈。
顺序栈算法设计的4要素:
- 栈空的条件:
s->top==-1
- 栈满的条件:
s->top==maxsize-1(data数组的最大下标)
- 元素e的进栈操作:先将栈顶指针top增1,然后将元素e放到栈顶指针处
- 出栈操作:先将栈顶指针top处的元素取出放在e中,然后将栈顶指针减1
共享栈
顺序栈采用一个数组存放栈中的元素。如果需要用到两个相同类型的栈,这时若为它们各自开辟一个数组空间,可能出现第一个栈满,而另一个栈还有剩余存储空间的情况。解决这个问题的方法是将两个栈合起来,用一个数组来实现这两个栈,称为共享栈。
共享栈的4要素:
- 栈空条件:栈1空为
top1==-1
;栈2空为top2==maxsize
- 栈满条件:
top1==top2-1
- 元素x进栈操作:进栈1操作为
top1++;data[top1]=x;
进栈2操作为top2--;data[top2]=x;
- 出栈x操作:出栈1操作为
x=data[top1];top1--;
出栈2操作为x=data[top2];top2++;
栈的链式存储结构及其基本运算的实现
采用链式存储结构的栈称为链栈。
链栈算法设计的4要素:
- 栈空条件:
s->next==NULL
- 栈满条件:由于只有内存溢出时才出现栈满,通常不考虑这样的情况,所以在链栈中可以看成不存在栈满。
- 元素e的进栈操作:新建一个结点存放元素e(由p指向它),将结点p插入到头结点之后。
- 出栈操作:取出首结点的data值并将其删除
队列
队列的定义
队列简称队,它也是一种操作受限的线性表,其限制为仅允许在表的一端进行插入操作,而在表的另一端进行删除操作。
把进行插入的一端称为队尾,把进行删除的一端称为队头或队首,向队列中插入新元素称为进队或入队,新元素进队后就成为新的队尾元素;从队列中删除元素称为出队或离队,元素出队后,其直接后继元素就成为队首元素。
队列的顺序存储结构及其基本运算的实现
采用顺序存储结构的队列称为顺序队。
顺序队算法设计的4要素:
- 队空条件:
q->front==q->rear;
- 队满条件:
q->front==maxsize-1(data数组的最大下标)
- 元素e的进队操作:先将rear增1,然后将元素e放到data数组的rear位置
- 出队操作:先将front增1,然后取出data数组中front位置的元素
队列的链式存储结构及其基本运算的实现
采用链式存储结构的队列称为链队。
链队算法设计的4要素:
- 队空的条件:
q->rear==NULL(也可以为q->front==NULL)
- 队满的条件:不考虑
- 元素e的进队操作:新建一个结点存放元素e(由p指向它),将结点p插入作为尾结点
- 出队操作:取出队首结点的data值并将其删除