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

文章目录

    • 一、顺序栈
    • 二、链栈
  • 队列
    • 一、顺序队列
    • 二、链队列

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

存储结构:

一、顺序栈

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

小白也能看懂的数据结构:栈与队列_第1张图片
(maxSize为数组长度:8)

二、链栈

  1. 链栈的实现方法:
    小白也能看懂的数据结构:栈与队列_第2张图片

  2. 元素入栈:
    小白也能看懂的数据结构:栈与队列_第3张图片
    (始终让top指向新插入的结点)

  3. 元素出栈:
    小白也能看懂的数据结构:栈与队列_第4张图片

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

小白也能看懂的数据结构:栈与队列_第5张图片

队列

  • 由于队列只能在前端删除,后端插入,这个性质,才引申出先进先出的。入队:rear++;出队, front++。
  • 逻辑结构:先进先出
  • 队列(queue)是一种插入元素只能在一端(队尾)能进,删除元素只能在另一端(队头)进行的线性表。
  • 队列的逻辑结构属于线性表,只不过在操作上加了一些约束。

存储结构:

一、顺序队列

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

上边两种操作会造成假溢出(下图继续入队元素就会发生数组越界的情况)
小白也能看懂的数据结构:栈与队列_第6张图片

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

小白也能看懂的数据结构:栈与队列_第7张图片

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

小白也能看懂的数据结构:栈与队列_第8张图片
小白也能看懂的数据结构:栈与队列_第9张图片

二、链队列

小白也能看懂的数据结构:栈与队列_第10张图片
1.head->next – NULL为真,则队空;
只有有足够的内存,队就不会满。

如果rear和front包裹在一个结构体中:
小白也能看懂的数据结构:栈与队列_第11张图片
2.front为空时队列为空。

你可能感兴趣的:(数据结构,数据结构,栈,队列,入栈出栈,入队出队)