小白也能看懂的数据结构:栈与队列

  • 逻辑结构:先进后出
  • 栈(stack)是一种只能在一端(栈顶,另一端叫栈底)进行插入或删除操作的线性表。
  • 栈的逻辑结构属于线性表,只不过在操作上加了一些约束。

存储结构:

一、顺序栈

  1. 顺序栈的实现方法:
int stack[maxSize];
int top = -1
  1. 元素入栈:
stack[++top] = 1;
stack[++top] = 2;
……
  1. 元素出栈:
x = stack[top--];
  1. 如何判断栈空和栈满:

在这里插入图片描述
(maxSize为数组长度:8)

二、链栈

  1. 链栈的实现方法:
    在这里插入图片描述

  2. 元素入栈:
    在这里插入图片描述
    (始终让top指向新插入的结点)

  3. 元素出栈:
    在这里插入图片描述

  4. 如何判断栈满或栈空:

在这里插入图片描述

队列

  • 逻辑结构:先进先出
  • 队列(queue)是一种插入元素只能在一端(队尾)能进,删除元素只能在另一端(队头)进行的线性表。
  • 队列的逻辑结构属于线性表,只不过在操作上加了一些约束。

存储结构:

一、顺序队列

  1. 顺序队列的实现方法:
int queue [maxsize];
int front 0, rear = 0;
  1. 错误的元素入队:
queue[++rear] = x;     //rear尾指针
  1. 错误的元素出队:
x = queue[++front];     //front头指针

上边两种操作会造成假溢出(下图继续入队元素就会发生数组越界的情况)
在这里插入图片描述

  1. 正确的元素入队:
 rear=(rear+1) %maxSize;    //rear此时为8,maxSize是9,通过此操作rear=0,形成循环
 queue [rear] = x;
  1. 正确的元素出队:
front=(front+1)%maxSize;
x= queue [front];

在这里插入图片描述

  1. 如何判断队空和队满:

在这里插入图片描述
在这里插入图片描述

二、链队列

在这里插入图片描述
1.head->next – NULL为真,则队空;
只有有足够的内存,队就不会满。

如果rear和front包裹在一个结构体中:
在这里插入图片描述
2.front为空时队列为空。

发布了121 篇原创文章 · 获赞 600 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zag666/article/details/105398940