数据结构和算法

DSA 主页 DSA 概述 DSA 环境设置 DSA 算法基础 DSA 渐近分析

数据结构

DSA 数据结构基础 DSA 数据结构和类型 DSA 数组数据结构

链接列表

DSA 链接列表数据结构 DSA 双向链接列表数据结构 DSA 循环链表数据结构

堆栈 &队列

DSA 堆栈数据结构 DSA 表达式解析 DSA 队列数据结构

搜索算法

DSA 搜索算法 DSA 线性搜索算法 DSA 二分搜索算法 DSA 插值搜索 DSA 跳跃搜索算法 DSA 指数搜索 DSA 斐波那契搜索 DSA 子列表搜索 DSA 哈希表

排序算法

DSA 排序算法 DSA 冒泡排序算法 DSA 插入排序算法 DSA 选择排序算法 DSA 归并排序算法 DSA 希尔排序算法 DSA 堆排序 DSA 桶排序算法 DSA 计数排序算法 DSA 基数排序算法 DSA 快速排序算法

图形数据结构

DSA 图形数据结构 DSA 深度优先遍历 DSA 广度优先遍历 DSA 生成树

树数据结构

DSA 树数据结构 DSA 树遍历 DSA 二叉搜索树 DSA AVL 树 DSA 红黑树 DSA B树 DSA B+ 树 DSA 伸展树 DSA 尝试 DSA 堆数据结构

递归

DSA 递归算法 DSA 使用递归的汉诺塔 DSA 使用递归的斐波那契数列

分而治之

DSA 分而治之 DSA 最大最小问题 DSA 施特拉森矩阵乘法 DSA Karatsuba 算法

贪婪算法

DSA 贪婪算法 DSA 旅行商问题(贪婪方法) DSA Prim 最小生成树 DSA Kruskal 最小生成树 DSA Dijkstra 最短路径算法 DSA 地图着色算法 DSA 分数背包问题 DSA 作业排序截止日期 DSA 最佳合并模式算法

动态规划

DSA 动态规划 DSA 矩阵链乘法 DSA Floyd Warshall 算法 DSA 0-1 背包问题 DSA 最长公共子序列算法 DSA 旅行商问题(动态方法)

近似算法

DSA 近似算法 DSA 顶点覆盖算法 DSA 集合覆盖问题 DSA 旅行商问题(近似方法)

随机算法

DSA 随机算法 DSA 随机快速排序算法 DSA Karger 最小割算法 DSA Fisher-Yates 洗牌算法

DSA 有用资源

DSA 问答 DSA 快速指南


队列数据结构

什么是队列?

队列是一种线性数据结构,其元素按先进先出(FIFO)原则存储,即最先插入的元素将最先被访问。队列是一种类似于栈的抽象数据类型 (ADT),其与栈的不同之处在于队列的两端都是开放的。数据从一端插入队列,从另一端删除。队列在大多数编程语言中都非常常用。

car

队列在现实世界中的一个例子是单车道单行道,车辆先进入,先离开。更多现实世界的例子可以看作是售票窗口和公交车站的排队。

队列的表示

与堆栈ADT类似,队列ADT也​​可以使用数组、链表或指针来实现。在本教程中,我们将使用一维数组作为一个小示例来实现队列。

队列的表示

队列的基本操作

队列操作还包括队列的初始化、使用以及从内存中永久删除数据。

队列ADT中最基本的操作包括:enqueue()、dequeue()、peek()、isFull()、isEmpty()。这些都是内置操作,用于执行数据操作和检查队列状态。

队列使用两个指针:front 和 rear。front 指针从前端访问数据(帮助入队),而 rear 指针从后端访问数据(帮助出队)。

队列插入操作:Enqueue()

enqueue() 是一个数据操作操作,用于将元素插入堆栈。以下算法以更简单的方式描述了 enqueue() 操作。

算法

1. 启动
2. 检查队列是否已满。
3. 如果队列已满,则产生溢出错误并退出。
4. 如果队列未满,则增加 rear 指针指向
下一个空位。
5. 将数据元素添加到队列尾部指向的位置。

6. 返回成功。
7. 结束

示例

以下是此操作在各种编程语言中的实现 −

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isFull(){
   return itemCount == MAX;
}
bool isEmpty(){
   return itemCount == 0;
}
int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int main(){
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   while(!isEmpty()) {
      int n = removeData();
      printf("%d ",n);
   }
}

输出

Queue: 3 5 9 1 12 15
#include <iostream>
#include <string>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isFull(){
   return itemCount == MAX;
}
bool isEmpty(){
   return itemCount == 0;
}
int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int main(){
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   while(!isEmpty()) {
      int n = removeData();
      printf("%d ",n);
   }
}

输出

Queue: 3 5 9 1 12 15
import java.util.*;
public class Demo{
static final int MAX = 6;
static int intArray[] = new int[MAX];
static int front = 0;
static int rear = -1;
static int itemCount = 0;
public static boolean isFull(){
   return itemCount == MAX;
}
public static boolean isEmpty(){
   return itemCount == 0;
}
public static int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
public static void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
public static void main(String[] args){
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   System.out.print("Queue: ");
   while(!isEmpty()) {
      int n = removeData();
      System.out.print(n + " ");
   }
  }
}

输出

Queue: 3 5 9 1 12 15 
MAX = 6;
intArray = [0] * MAX
front = 0;
rear = -1;
itemCount = 0;
def isFull():
    return itemCount == MAX
def isEmpty():
    return itemCount == 0
def removeData():
    data = intArray[front+1]
    if(front == MAX):
        front = 0
    itemCount-1
    return data
def insert(data):
    global rear, itemCount
    if(not isFull()):
        if(rear == MAX-1):
            rear = -1
        rear = rear + 1
        intArray[rear] = data
        itemCount+1
insert(3);
insert(5);
insert(9);
insert(1);
insert(12);
insert(15);
print("Queue: ")
for i in range(MAX):
    print(intArray[i], end = " ")
while(not isEmpty()):
    n = removeData()
    print(n, end = " ")

输出

Queue: 
3 5 9 1 12 15

队列删除操作:dequeue()

dequeue() 是一个数据操作操作,用于从堆栈中删除元素。以下算法以更简单的方式描述了 dequeue() 操作。

算法

1. 开始
2. 检查队列是否为空。
3. 如果队列为空,则产生下溢错误并退出。
4. 如果队列非空,则访问 front 指向的数据。
5. 增加 front 指针,使其指向下一个可用的
数据元素。
6. 返回成功。
7. 结束

示例

以下是此操作在各种编程语言中的实现 −

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isFull(){
   return itemCount == MAX;
}
bool isEmpty(){
   return itemCount == 0;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
int main(){
   int i;
   
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);

   // remove one item
   int num = removeData();
   printf("
Element removed: %d
",num);
   printf("Updated Queue: ");
   while(!isEmpty()) {
      int n = removeData();
      printf("%d ",n);
   }
}

输出

Queue: 3 5 9 1 12 15 
Element removed: 3
Updated Queue: 5 9 1 12 15 
#include <iostream>
#include <string>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isFull(){
   return itemCount == MAX;
}
bool isEmpty(){
   return itemCount == 0;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
int main(){
   int i;
   
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);
   
   // remove one item
   int num = removeData();
   printf("
Element removed: %d
",num);
   printf("Updated Queue: ");
   while(!isEmpty()) {
      int n = removeData();
      printf("%d ",n);
   }
}

输出

Queue: 3 5 9 1 12 15 
Element removed: 3
Updated Queue: 5 9 1 12 15 
public class Demo{
static final int MAX = 6;
static int intArray[] = new int[MAX];
static int front = 0;
static int rear = -1;
static int itemCount = 0;
public static boolean isFull(){
   return itemCount == MAX;
}
public static boolean isEmpty(){
   return itemCount == 0;
}
public static void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
public static int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
public static void main(String[] args){
   int i;
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   System.out.print("Queue: ");
   for(i = 0; i < MAX; i++)
      System.out.print(intArray[i] + " ");
   
   // remove one item
   int num = removeData();
   System.out.print("
Element removed: " + num);
   System.out.print("
Updated Queue: ");
   while(!isEmpty()) {
      int n = removeData();
      System.out.print(n + " ");
   }
  }
}

输出

Queue: 3 5 9 1 12 15 
Element removed: 3
Updated Queue: 5 9 1 12 15 
MAX = 6
intArray = [0] * MAX
front = 0
rear = -1
itemCount = 0
def isFull():
    return itemCount == MAX
def isEmpty():
    return itemCount == 0
def insert(data):
    global rear, itemCount
    if not isFull():
        if rear == MAX-1:
            rear = -1
        rear += 1
        intArray[rear] = data
        itemCount += 1
def removeData():
    global front, itemCount
    data = intArray[front]
    if front == MAX-1:
        front = 0
    else:
        front += 1
    itemCount -= 1
    return data
insert(3);
insert(5);
insert(9);
insert(1);
insert(12);
insert(15);
print("Queue: ")
for i in range(MAX):
    print(intArray[i], end = " ")
num = removeData()
print("
Element removed: ", num)
print("Updated Queue: ")
while(not isEmpty()):
    n = removeData()
    print(n, end = " ")

输出

Queue: 
3 5 9 1 12 15 
Element removed:  3
Updated Queue: 
5 9 1 12 15

队列 - peek() 操作

peek() 操作用于检索队列中最前端的元素,但不删除它。此操作借助指针检查队列的状态。

算法

1. 开始
2. 返回队列前端的元素
3. 结束

示例

以下是此操作在各种编程语言中的实现 −

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
int peek(){
   return intArray[front];
}
bool isFull(){
   return itemCount == MAX;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int main(){
   int i;
   
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);
   printf("
Element at front: %d
",peek());
}

输出

Queue: 3 5 9 1 12 15 
Element at front: 3
#include <iostream>
#include <string>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
int peek(){
   return intArray[front];
}
bool isFull(){
   return itemCount == MAX;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int main(){
   int i;
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);
   printf("
Element at front: %d
",peek());
}

输出

Queue: 3 5 9 1 12 15 
Element at front: 3
public class Demo{
final static int MAX = 6;
static int intArray[] = new int[MAX];
static int front = 0;
static int rear = -1;
static int itemCount = 0;
public static int peek(){
   return intArray[front];
}
public static boolean isFull(){
   return itemCount == MAX;
}
public static void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
public static void main(String[] args){
   int i;
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   System.out.print("Queue: ");
   for(i = 0; i < MAX; i++)
      System.out.print(intArray[i] + " ");
   System.out.print("
Element at front: " + peek());
  }
}

输出

Queue: 3 5 9 1 12 15 
Element at front: 3
MAX = 6
intArray = [0] * MAX
front = 0
rear = -1
itemCount = 0
def peek():
    return intArray[front]
def isFull():
    return itemCount == MAX
def insert(data):
    global rear, itemCount
    if(not isFull()):
        if(rear == MAX-1):
            rear = -1
        rear  = rear + 1
        intArray[rear] = data
        itemCount+1
insert(3);
insert(5);
insert(9);
insert(1);
insert(12);
insert(15);
print("Queue: ")
for i in range(MAX):
    print(intArray[i], end = " ")
print("
Element at front: ", peek())

输出

Queue: 
3 5 9 1 12 15 
Element at front:  3

队列 - isFull() 操作

isFull() 操作用于验证堆栈是否已满。

算法

1. 开始
2. 如果队列元素数量等于队列大小,
则返回 true
3. 否则,返回 false
4. 结束

示例

以下是此操作在各种编程语言中的实现 −

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isFull(){
   return itemCount == MAX;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int main(){
   int i;
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);
   printf("
");
   if(isFull()) {
      printf("Queue is full!
");
   }
}

输出

Queue: 3 5 9 1 12 15 
Queue is full!
#include <iostream>
#include <string>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isFull(){
   return itemCount == MAX;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int main(){
   int i;
   
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);
   printf("
");
   if(isFull()) {
      printf("Queue is full!
");
   }
}

输出

Queue: 3 5 9 1 12 15 
Queue is full!
import java.io.*;
public class QueueExample {
   static private int intArray[];
   private int front;
   private int rear;
   private int itemCount;
   static private int MAX;
   QueueExample(int size) {
      intArray = new int[size];
      front = 0;
      rear = -1;
      MAX = size;
      itemCount = 0;
   }
   public boolean isFull() {
      return itemCount == MAX;
   }
   public void insert(int key) {
      if(!isFull()) {
         if(rear == MAX-1) {
            rear = -1;
         }
         intArray[++rear] = key;
         itemCount++;
      }
   }
   public static void main (String[] args) {
      QueueExample q = new QueueExample(5);
      q.insert(1); // inserting 1 in the stack
      q.insert(2);
      q.insert(3);
      q.insert(4);
      q.insert(5);
      System.out.print("Queue: ");
      for(int i = 0; i<MAX; i++){
          System.out.print(intArray[i] + " ");
      }
      if(q.isFull()){
	  System.out.print("
Queue is full!");
   }
  }
}

输出

Queue: 1 2 3 4 5 
Queue is full!
#队列中 isFull 的 Python 代码
MAX = 6
intArray = [None] * MAX
front = 0
rear = -1
itemCount = 0

def isFull():
    return itemCount == MAX

def insert(data):
    global rear, itemCount
    if not isFull():
        if rear == MAX-1:
            rear = -1
        rear += 1
        intArray[rear] = data
        itemCount += 1
#将 5 个项目插入队列
insert(3)
insert(5)
insert(9)
insert(1)
insert(12)
insert(15)
print("Queue: ", end="")
for i in range(MAX):
    print(intArray[i], end=" ")
print()
if isFull():
    print("Queue is full!")

输出

Queue: 3 5 9 1 12 15 
Queue is full!

队列 - isEmpty() 操作

isEmpty() 操作用于验证堆栈是否为空。此操作借助栈顶指针来检查堆栈的状态。

算法

1. 开始
2. 如果队列元素数量为零,则返回 true
3. 否则,返回 false
4. 结束

示例

以下是此操作在各种编程语言中的实现 −

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isEmpty(){
   return itemCount == 0;
}
int main(){
   int i;
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);
   printf("
");
   if(isEmpty()) {
      printf("Queue is Empty!
");
   }
}

输出

Queue: 0 0 0 0 0 0 
Queue is Empty!
#include <iostream>
#include <string>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
bool isEmpty(){
   return itemCount == 0;
}
int main(){
   int i;
   printf("Queue: ");
   for(i = 0; i < MAX; i++)
      printf("%d ", intArray[i]);
   printf("
");
   if(isEmpty()) {
      printf("Queue is Empty!
");
   }
}

输出

Queue: 0 0 0 0 0 0 
Queue is Empty!
public class Demo{
final static int MAX = 6;
static int intArray[] = new int[MAX];
static int front = 0;
static int rear = -1;
static int itemCount = 0;
public static boolean isEmpty(){
   return itemCount == 0;
}
public static void main(String[] args){
   int i;
   System.out.print("Queue: ");
   for(i = 0; i < MAX; i++)
      System.out.print(intArray[i] + " ");
   if(isEmpty()) {
      System.out.print("
Queue is Empty!");
   }
 }
}

输出

Queue: 0 0 0 0 0 0 
Queue is Empty!
#python code for isFull in Queue
MAX = 6
intArray = [None] * MAX
front = 0
rear = -1
itemCount = 0

def isEmpty():
    return itemCount == 0

print("Queue: ", end="")
for i in range(MAX):
    print(intArray[i], end=" ")
print()
if isEmpty():
    print("Queue is empty!")

输出

Queue: None None None None None None 
Queue is empty!

队列完整实现

以下是各种编程语言中队列的完整实现 −

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
int peek(){
   return intArray[front];
}
bool isEmpty(){
   return itemCount == 0;
}
bool isFull(){
   return itemCount == MAX;
}
int size(){
   return itemCount;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
int main(){
   
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   printf("Queue size: %d", size());
   printf("
Queue: ");
   for(int i = 0; i < MAX; i++){
       printf("%d ", intArray[i]);
   }
   if(isFull()) {
      printf("
Queue is full!");
   }

   // remove one item
   int num = removeData();
   printf("
Element removed: %d", num);
   printf("
Size of Queue after deletion: %d", size());
   printf("
Element at front: %d", peek());
}

输出

Queue size: 6
Queue: 3 5 9 1 12 15 
Queue is full!
Element removed: 3
Size of Queue after deletion: 5
Element at front: 5
#include <iostream>
using namespace std;
#include <string>
#define MAX 6
int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;
int peek(){
   return intArray[front];
}
bool isEmpty(){
   return itemCount == 0;
}
bool isFull(){
   return itemCount == MAX;
}
int size(){
   return itemCount;
}
void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
int main(){
   
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   cout<<"Queue size: "<<size();
   cout<<"
Queue: ";
   for(int i = 0; i < MAX; i++){
       cout<<intArray[i]<<" ";
   }
   if(isFull()) {
      cout<<"
Queue is full!";
   }

   // remove one item
   int num = removeData();
   cout<<"
Element removed: "<<num;
   cout<<"
Queue size after deletion: "<<size();
   cout<<"
Element at front: " <<peek();
}

输出

Queue size: 6
Queue: 3 5 9 1 12 15 
Queue is full!
Element removed: 3
Queue size after deletion: 5
Element at front: 5
public class Demo{
final static int MAX = 6;
static int intArray[] = new int[MAX];
static int front = 0;
static int rear = -1;
static int itemCount = 0;
public static int peek(){
   return intArray[front];
}
public static boolean isEmpty(){
   return itemCount == 0;
}
public static boolean isFull(){
   return itemCount == MAX;
}
public static int size(){
   return itemCount;
}
public static void insert(int data){
   if(!isFull()) {
      if(rear == MAX-1) {
         rear = -1;
      }
      intArray[++rear] = data;
      itemCount++;
   }
}
public static int removeData(){
   int data = intArray[front++];
   if(front == MAX) {
      front = 0;
   }
   itemCount--;
   return data;
}
public static void main(String[] args){
   
   /* insert 5 items */
   insert(3);
   insert(5);
   insert(9);
   insert(1);
   insert(12);
   insert(15);
   System.out.print("Queue size: " + size());
   System.out.print("
Queue: ");
   for(int i = 0; i < MAX; i++){
       System.out.print(intArray[i] + " ");
   }
   if(isFull()) {
      System.out.print("
Queue is full!");
   }

   // remove one item
   int num = removeData();
   System.out.print("
Element removed: " + num);
   System.out.print("
Queue size after deletion: " + size());
   System.out.print("
Element at front: " + peek());
 }
}

输出

Queue size: 6
Queue: 3 5 9 1 12 15 
Queue is full!
Element removed: 3
Queue size after deletion: 5
Element at front: 5
MAX = 6
intArray = [0] * MAX
front = 0
rear = -1
itemCount = 0
def peek():
    return intArray[front]

def isEmpty():
    return itemCount == 0

def isFull():
    return itemCount == MAX

def size():
    return itemCount

def insert(data):
    global rear, itemCount
    if not isFull():
        if rear == MAX-1:
            rear = -1
        rear += 1
        intArray[rear] = data
        itemCount += 1

def removeData():
    global front, itemCount
    data = intArray[front]
    if front == MAX-1:
        front = 0
    else:
        front += 1
    itemCount -= 1
    return data

def main():
    insert(3)
    insert(5)
    insert(9)
    insert(1)
    insert(12)
    insert(15)
    print("Queue size: ", size())
    print("Queue: ")
    for i in range(MAX):
        print(intArray[i], end = " ")
    if isFull():
        print("
Queue is full!")
    num = removeData()
    print("Element removed: ", num)
    print("Queue size after deletion: ", size())
    print("Element at front: ", peek())

main()

输出

Queue size:  6
Queue: 
3 5 9 1 12 15 
Queue is full!
Element removed:  3
Queue size after deletion:  5
Element at front:  5

C 语言队列实现

点击查看C 语言队列程序的实现