文章目录

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


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

存储结构:

一、顺序栈

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

java先进先出栈 栈先进先出怎么算_入栈出栈


(maxSize为数组长度:8)

二、链栈

  1. 链栈的实现方法:
  2. java先进先出栈 栈先进先出怎么算_入栈出栈_02

  3. 元素入栈:
  4. java先进先出栈 栈先进先出怎么算_java先进先出栈_03

  5. (始终让top指向新插入的结点)
  6. 元素出栈:
  7. java先进先出栈 栈先进先出怎么算_java先进先出栈_04

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

java先进先出栈 栈先进先出怎么算_入栈出栈_05

队列

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

存储结构:

一、顺序队列

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

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

java先进先出栈 栈先进先出怎么算_java先进先出栈_06

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

java先进先出栈 栈先进先出怎么算_数据结构_07

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

java先进先出栈 栈先进先出怎么算_数据结构_08


java先进先出栈 栈先进先出怎么算_数据结构_09

二、链队列

java先进先出栈 栈先进先出怎么算_栈_10


1.head->next – NULL为真,则队空;

只有有足够的内存,队就不会满。如果rear和front包裹在一个结构体中:

java先进先出栈 栈先进先出怎么算_队列_11


2.front为空时队列为空。