Java数据结构系列之——队列(3):队列的链式存储结构及其实现

package queue.linkQueue;

public class Node {
	// 数据域
	Object element;
	// 指针域
	Node next;

	// 头结点初始化
	public Node(Node next) {
		this.next = next;
	}

	// 非头结点初始化
	public Node(Object element, Node next) {
		this.element = element;
		this.next = next;
	}
}

***************************************************************************************

package queue.linkQueue;

public class LinkQueue {
	Node front;// 头结点
	Node rear;// 尾结点
	int size;// 队列大小

	// 初始化一个空队列
	public LinkQueue() {
		front = new Node(null);
		rear = front;
		size = 0;
	}

	// 队列的大小
	public int size() {
		return size;
	}

	// 判断队列是否为空
	public boolean isEmpty() {
		return size == 0;
	}

	// 入队列
	public void enQueue(int data) {
		Node node = new Node(data, null);
		rear.next = node;

		rear=node;

		size++;
	}

	// 出队列
	public Object deQueue() {
		if (isEmpty()) {
			throw new IndexOutOfBoundsException("队列为空");
		}

		Node node = front.next;// 得到以一个结点
		front.next = node.next;// 将头结点的第一个结点指向第一个结点的下一个结点

		if (node == rear) {// 如果队列中只有一个元素,则删除后将rear指向头结点
			rear = front;
		}
		size--;

		return node.element;
	}

	// 得到对头元素,不删除
	public Object getFront() {
		if (isEmpty()) {
			return null;
		} else {
			return front.next.element;
		}
	}

	// 打印队列中的元素
	public void traverse() {
		if (isEmpty()) {
			System.out.println("null");
		} else {
			Node current = front.next;// 当前结点
			for (Node node = current; node != null; node = node.next) {
				System.out.print(node.element + " ");
			}
		}
		System.out.println();
	}
}
时间: 2024-11-03 21:40:24

Java数据结构系列之——队列(3):队列的链式存储结构及其实现的相关文章

数据结构开发(5):线性表的链式存储结构

0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? 链式存储的定义: 为了表示每个数据元素与其直接后继元素之间的逻辑关系:数据元素除了存储本身的信息外,还需要存储其直接后继的信息. 链式存储逻辑结构: 基于链式存储结构的线性表中,每个结点都包含数据域和指针域 数据域:存储数据元素本身 指针域:存储相邻结点的地址 专业术语的统一: 顺序表 基于顺序存储

数据结构:队列的链式存储结构

链队列的实现方法: 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点.空队列时,front和rear都指向头节点. 注意:这里的实现是有头结点的,在队列的初始化函数中要为头结点开辟空间. 链队列的实现代码: #include <iostream> #include <stdlib.h> using namespace std; /**********************

队列的顺序存储结构和链式存储结构

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表(在队尾进行插入操作,在对头进行删除操作). 与栈相反,队列是一种先进先出(First In First Out, FIFO)的线性表. 与栈相同的是,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或链表作为基础. 队列的链式存储结构 队列既可以用链表实现,也可以用顺序表实现.跟栈相反的是,栈一般我们用顺序表来实现,而队列我们常用链表来实现,简称为链队列. typedef struct QNode { ElemT

队列的链式存储结构及实现

ref : https://blog.csdn.net/qq_29542611/article/details/78907339 队列的链式存储结构,其实就是线性表的单链表,只不过它只是尾进头出而已,我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端节点.如果 空队列时,front和rear都指向头结点. 入队操作: 在队尾添加元素,先将队尾元素的next指向添加的元素,然后将队尾指针重新指向新的队尾即可. 出队操作: 头结结点指向的结点即为队头结点,出

数据结构(四)——基于链式存储结构的线性表

数据结构(四)--基于链式存储结构的线性表 一.基于链式存储结构的线性表 1.链式存储的定义 链式存储为了表示数据元素与其直接后继元素间的逻辑关系,数据元素除了存储本身的信息外,还需要存储直接后继的信息.相连的数据元素之间在存储空间中不要求连续.链式存储的逻辑结构基于链式存储结构的线性表中,每个结点都包含数据域和指针域.数据域用于存储数据元素本身,指针域用于存储相邻结点的地址. 2.链表的定义 链表是基于链式存储结构的线性表链表的基本元素:头结点:链表中的辅助结点,包含指向第一个数据元素的指针数

栈的链式存储结构及应用(C、Java代码)

链式存储结构最大的好处就是没有空间的限制,可以通过指针指向将结点像以链的形式把结点链接,我们熟悉的线性表就有链式存储结构. 当然,栈同样有链式存储结构,栈的链式存储结构,简称链栈. 从图片可以看到,和单链表很像,拥有一个头指针top,又称作栈顶指针,所以此时就不再需要单链表里面的头结点了. 对于链栈来说,基本不存在栈满的情况,除非计算机内存已经没有了可使用的空间,如果真的存在,那么计算机系统已经面临着即将死机崩溃的情况,而不是这个链栈是否溢出的问题了. 对于空栈来说,链表的定义是头指针指向NUL

队列的链式存储结构(C语言实现)

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define OK 1 5 #define ERR 2 6 #define TRUE 1 7 #define FALSE 0 8 9 typedef int status; //定义函数返回的状态,OK & ERR 10 typedef char datatype; //定义队列中每个元素的数据类型,这里暂定为字符型 11 12 typedef struct LinkQueue_

Java实现队列——队列内部使用链式存储结构

链队列 代码: package hash; /**  * Created with IntelliJ IDEA.  * User: ASUS  * Date: 14-9-17  * Time: 上午11:58  * To change this template use File | Settings | File Templates.  */ public class CustomLinkQueue<E> {     //定义一个内部类Node,Node实例代表链栈的节点.     priv

队列的链式存储结构

1 链队列的存储结构 将对头指针front指向链队列的头结点,队尾指针rear指向终端结点. 空队列时,头指针front和尾指针rear都指向头结点. 链队列的存储结构为: typedef int QElemType; typedef struct QNode { //结点结构 QElemType data; struct QNode *next; }QNode; typedef struct QNode * QueuePtr; typedef struct { //队列的链表结构 QueueP