队列----链接列表实现队列

本文介绍了一种使用链表来实现队列数据结构的方法。通过定义节点类Node和队列类LinkedQueue,实现了队列的基本操作,包括插入、删除和遍历等功能。此外,还提供了一个简单的菜单驱动程序,用于演示队列的各种操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 链接列表实现队列
 */
package com.szy.structure.queues;

import java.util.Scanner;

class Node
{
	public int data;
	public Node next;
}
public class LinkedQueue
{
	Node FRONT,REAR;
	
	public LinkedQueue()
	{
		FRONT=null;
		REAR=null;
	}
	/**
	 * 插入新节点
	 * @param element
	 */
	public void insert(int element)
	{
		Node newNode=new Node();
		newNode.data=element;
		newNode.next=null;
		if (FRONT==null)
		{
			FRONT=newNode;
			REAR=newNode;
		}
		else
		{
			REAR.next=newNode;
			REAR=newNode;
		}
	}
	/**
	 * 删除节点
	 */
	public void remove()
	{
		if (FRONT==null)
		{
			System.out.println("队列为空!");
			return;
		}
		FRONT=FRONT.next;
	}
	/**
	 * 遍历节点
	 */
	public void display()
	{
		if (FRONT==null)
		{
			System.out.println("队列为空!");
			return;
		}
		Node currentNode=FRONT;
		while(currentNode!=null)
		{
			System.out.print(currentNode.data+" ");
			currentNode=currentNode.next;
		}
	}
	
	public static void main(String[] args) throws Exception {
		LinkedQueue queues=new LinkedQueue();
		int choice=0;
		while(true)
		{
			System.out.println("\n---MENU---");
			System.out.println("1.Insert");
			System.out.println("2.Delete");
			System.out.println("3.Display");
			System.out.println("4.Exit");
			System.out.println("----------");
			System.out.println("请选择:");
			Scanner scanner=new Scanner(System.in);
			choice=scanner.nextInt();
			switch (choice) {
			case 1:
			{
				System.out.println("请输入数字:");
				int input=scanner.nextInt();
				queues.insert(input);
			}
				break;
			case 2:
			{
				queues.remove();
			}
			break;
			case 3:
			{
				queues.display();
			}
			break;
			case 4:
				return;
			default:
				System.err.println("无效的输入!");
				break;
			}
		}
	}
}

 

### 关于DS队列中组队列的概念与实现 #### 组队列的基本概念 组队列是一种特殊的队列结构,其中的元素按照一定的逻辑被划分为多个小组。这些小组内部的数据可能具有某种关联性或共同属性[^1]。在实际应用场景中,组队列能够有效地管理和调度不同类型的资源或任务。 #### 组队列的核心操作 组队列支持两种基本命令:入队(enqueue)和出队(dequeue)。这两种操作遵循队列的一般特性,“先进先出”原则仍然适用。然而,在组队列中,入队和出队可能会涉及特定的分组处理逻辑。例如,某些实现允许按组优先级进行出入队操作。 #### 使用数组实现顺序组队列 如果通过C语言中的数组来实现队列,则需要预先定义一个足够大的数组作为底层存储容器。同时,为了维护队列头部和尾部的位置关系,还需引入两个变量`front`和`rear`分别表示当前队头和队尾索引位置[^2]。对于多组的情况,可以通过额外的元数据记录每组起始结束范围或者使用标志位区分各组边界。 以下是基于数组的一个简单示例代码片段展示如何构建基础版本的顺序组队列: ```c #define MAX_SIZE 100 // 假设最大容量为100 typedef struct { int data[MAX_SIZE]; int front; int rear; } GroupQueue; // 初始化函数 void init(GroupQueue *q) { q->front = -1; q->rear = -1; } // 判断是否为空 int isEmpty(GroupQueue *q){ return (q->front == -1); } // 入队操作 void enqueue(GroupQueue *q, int value){ if(q->rear >= MAX_SIZE-1){ printf("Overflow\n"); return ; } if(isEmpty(q)){ q->front=0; } q->data[++(q->rear)] = value; } ``` #### 链式存储下的组队列设计思路 当考虑动态分配空间时,单链表成为另一种可行的选择方案之一。此时每个节点除了保存自身的值外还应附加指向下一个同属一组成员的链接地址字段;另外设立专门用于标识整个队伍首末端点的辅助结构体实例化对象,便于统一控制访问权限并简化算法流程复杂度[^3]。 综上所述,无论是静态还是动态方法都可以用来完成对组队列的有效编码实践过程,并且它们各自具备独特优势特点值得深入探讨研究下去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值