数据结构资料(三)——栈和队列

栈的定义

栈是一种只能在一端进行插入或删除操作的线性表。 表中允许进行插入,删除操作的一端称为栈顶,表的另一端称为栈底
当栈中没有数据元素时称为空栈,栈的插入操作通常称为入栈进栈,栈的删除操作通常称为出栈退栈
栈的主要特点是后进先出,即后进栈的先出栈,栈也称为后进先出表。

栈的顺序存储结构及其基本运算的实现

采用顺序存储结构的栈称为顺序栈。
顺序栈算法设计的4要素:

  1. 栈空的条件:s->top==-1
  2. 栈满的条件:s->top==maxsize-1(data数组的最大下标)
  3. 元素e的进栈操作:先将栈顶指针top增1,然后将元素e放到栈顶指针处
  4. 出栈操作:先将栈顶指针top处的元素取出放在e中,然后将栈顶指针减1

共享栈

顺序栈采用一个数组存放栈中的元素。如果需要用到两个相同类型的栈,这时若为它们各自开辟一个数组空间,可能出现第一个栈满,而另一个栈还有剩余存储空间的情况。解决这个问题的方法是将两个栈合起来,用一个数组来实现这两个栈,称为共享栈
共享栈的4要素:

  1. 栈空条件:栈1空为top1==-1;栈2空为top2==maxsize
  2. 栈满条件:top1==top2-1
  3. 元素x进栈操作:进栈1操作为top1++;data[top1]=x;进栈2操作为top2--;data[top2]=x;
  4. 出栈x操作:出栈1操作为x=data[top1];top1--;出栈2操作为x=data[top2];top2++;

栈的链式存储结构及其基本运算的实现

采用链式存储结构的栈称为链栈。
链栈算法设计的4要素:

  1. 栈空条件:s->next==NULL
  2. 栈满条件:由于只有内存溢出时才出现栈满,通常不考虑这样的情况,所以在链栈中可以看成不存在栈满。
  3. 元素e的进栈操作:新建一个结点存放元素e(由p指向它),将结点p插入到头结点之后。
  4. 出栈操作:取出首结点的data值并将其删除

队列

队列的定义

队列简称队,它也是一种操作受限的线性表,其限制为仅允许在表的一端进行插入操作,而在表的另一端进行删除操作。
把进行插入的一端称为队尾,把进行删除的一端称为队头队首,向队列中插入新元素称为进队入队,新元素进队后就成为新的队尾元素;从队列中删除元素称为出队离队,元素出队后,其直接后继元素就成为队首元素。

队列的顺序存储结构及其基本运算的实现

采用顺序存储结构的队列称为顺序队。
顺序队算法设计的4要素:

  1. 队空条件:q->front==q->rear;
  2. 队满条件:q->front==maxsize-1(data数组的最大下标)
  3. 元素e的进队操作:先将rear增1,然后将元素e放到data数组的rear位置
  4. 出队操作:先将front增1,然后取出data数组中front位置的元素

队列的链式存储结构及其基本运算的实现

采用链式存储结构的队列称为链队。
链队算法设计的4要素:

  1. 队空的条件:q->rear==NULL(也可以为q->front==NULL)
  2. 队满的条件:不考虑
  3. 元素e的进队操作:新建一个结点存放元素e(由p指向它),将结点p插入作为尾结点
  4. 出队操作:取出队首结点的data值并将其删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FFFPAG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值