iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java数据结构基础:循环链表和栈
  • 646
分享到

java数据结构基础:循环链表和栈

2024-04-02 19:04:59 646人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录循环链表:实现思路:代码实现:栈:实现思路:代码实现:总结循环链表: 与单链表的最后一个节点的指针域为null不同,循环链表的最后一个节点的指针指向头结点 实现思路: 初始化时将

循环链表:

与单链表的最后一个节点的指针域为null不同,循环链表的最后一个节点的指针指向头结点

实现思路:

初始化时将头结点指向自身,添加节点到链表末尾时,将新节点的指针指向头结点

在遍历链表时,判断是否遍历到链表末尾,需要判断当前指针的下一个节点是否为头结点

代码实现:

节点类CircleNode:


public class Circlenode {
	public int data;
	public CircleNode next;
	public CircleNode(int data) {
		this.data = data;
	}
	@Override
	public String toString() {
		return "CircleNode{" + "data=" + data + '}';
	}
}

循环链表类CircleLinkedList:


public class CircleLinkedList {
	public CircleNode head = new CircleNode(0);
	public CircleLinkedList() {
		head.next = head;
	}
	//添加节点
	public void add(CircleNode circleNode) {
		CircleNode temp = head;
		//找到链表最后一个节点
		while (temp.next != head) {
			temp = temp.next;
		}
		temp.next = circleNode;
		circleNode.next = head;
	}
	//删除节点
	public void delete(int data) {
		CircleNode temp = head;
		boolean flag = false;    //标志是否找到待删除节点的前一个节点
		while (true) {
			if (temp.next == head) {
				//已经遍历到链表最后了
				break;
			} else if (temp.next.data == data) {
				//找到待删除节点的前一个节点
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if (flag) {
			temp.next = temp.next.next;
		} else {
			System.out.println("要删除的节点不存在");
		}
	}
	//输出链表
	public void show() {
		//判断链表是否为空
		if (head.next == head) {
			System.out.println("链表为空");
			return;
		}
		CircleNode temp = head.next;
		while (temp != head) {
			System.out.println(temp);
			temp = temp.next;
		}
	}
}

栈:

栈是一种受限制的线性表,只允许在表的一端进行插入,另一端进行删除,具有“先入先出”的特性

栈是一种受限制的线性表

只允许在表的一端进行插入和删除,这一端称作栈顶

具有先进后出的特性

实现思路:

栈底层数据采用数组存储

设置栈顶指针top指向栈顶的元素

判满:top = maxSize - 1

判空:top = -1

入栈:栈顶指针上移后写入数据

出栈:用临时变量保存栈顶数据,栈顶指针下移,返回栈顶数据

代码实现:


public class ArrayStack {
	private int maxSize;    //数组的最大容量
	private int[] stack;    //存放数据
	private int top = -1;    //栈顶指针
	public ArrayStack(int maxSize) {
		this.maxSize = maxSize;
		stack = new int[this.maxSize];
	}
	//判断栈是否满
	public boolean isFull() {
		return top == maxSize - 1;
	}
	//判断栈是否空
	public boolean isEmpty() {
		return top == -1;
	}
	//入栈
	public void push(int value) {
		//判断是否栈满
		if (isFull()) {
			System.out.println("栈满");
			return;
		}
		top++;
		stack[top] = value;
	}
	//出栈
	public int pop() {
		if (isEmpty()) {
			throw new RuntimeException("栈空");
		}
		int value = stack[top];
		top--;
		return value;
	}
	//输出栈,从栈顶开始显示
	public void show() {
		if (isEmpty()) {
			System.out.println("栈空");
			return;
		}
		for (int i = top; i >= 0; i--) {
			System.out.printf("stack[%d] = %d\n", i, stack[i]);
		}
	}
}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: java数据结构基础:循环链表和栈

本文链接: https://www.lsjlt.com/news/131603.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java数据结构基础:循环链表和栈
    目录循环链表:实现思路:代码实现:栈:实现思路:代码实现:总结循环链表: 与单链表的最后一个节点的指针域为null不同,循环链表的最后一个节点的指针指向头结点 实现思路: 初始化时将...
    99+
    2022-11-12
  • java数据结构中的循环链表和栈是什么
    这篇文章主要讲解了“java数据结构中的循环链表和栈是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java数据结构中的循环链表和栈是什么”吧!目录循环链表:实现思路:代码实现:栈:实现...
    99+
    2023-06-20
  • java数据结构基础:栈
    目录准备工作编码环节push方法pop方法empty方法全部代码总结准备工作 工具:idea+jdk8 技术要求:java基础语法 编码环节 首先,我们得先确定下来,用什么数据来模拟...
    99+
    2022-11-12
  • java数据结构基础:单链表与双向链表
    目录单链表:实现思路:代码实现:双向链表:实现思路:代码实现:总结单链表: 每个数据是以节点的形式存在的 每个节点分为数据域和指针域 数据域中保存该节点的数据 指针域中保存指向下一个...
    99+
    2022-11-12
  • java数据结构基础:单,双向链表
    目录单向链表单链表图解代码双向链表编码总结单向链表 单向链表比顺序结构的线性表最大的好处就是不用保证存放的位置,它只需要用指针去指向下一个元素就能搞定。 单链表图解 图画的比较粗糙...
    99+
    2022-11-12
  • C++零基础精通数据结构之带头双向循环链表
    目录与单链表的区别代码的实现接口节点的构造初始化链表开辟节点销毁链表打印链表尾插链表尾删链表头插链表头删链表查找链表链表pos位置的删除总结与单链表的区别 单向/双向 单向:只有一个...
    99+
    2022-11-13
  • java数据结构基础:顺序队列和循环队列
    目录队列:顺序队列:代码实现:循环队列:代码实现:总结队列: 队列是一种受限制的线性表 只允许在表的一端进行插入,另一端进行删除 插入的一端称作队尾,删除的一端称作队头 具有先进先出...
    99+
    2022-11-12
  • Java基础之选择结构与循环结构
    目录一、选择结构1.1基本if选择结构1.1.1语法1.1.2执行流程1.1.3代码展示1.1.4运行结果1.2平衡if选择结构1.2.1语法1.2.2执行流程1.2.3代码展示1....
    99+
    2022-11-12
  • Python数据结构之循环链表详解
    目录0. 学习目标1. 循环链表简介2. 循环单链表实现2.1 循环单链表的基本操作2.2 简单的实现方法2.3 循环单链表应用示例2.4 利用循环单链表基本操作实现复杂操作3. 循...
    99+
    2022-11-13
  • Java数据结构与算法学习之循环链表
    目录存储结构示意图初始化循环链表 循环链表的插入首位置代码实现其他位置代码实现(总)循环链表的删除1.操作的为第一个元素2.操作元素不为第一个元素代码实现(总)循环链表的常见操作  ...
    99+
    2022-11-12
  • JavaScript数据结构之单链表和循环链表的示例分析
    这篇文章将为大家详细讲解有关JavaScript数据结构之单链表和循环链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链表是一种物理存储单元上非线性、非连续性...
    99+
    2022-10-19
  • java数据结构基础:线性表
    目录前言需求分析编码add方法getIndex方法pop方法insert方法getAll全部代码总结前言 其实线性表在生活中和栈的结构差不多。昨天总结了一篇单链表,也是线性表的一种。...
    99+
    2022-11-12
  • C语言数据结构之双链表&循环链表&静态链表详解
    目录单链表 VS 双链表双链表双链表的初始化(带头结点)双链表的插入双链表的删除双链表的遍历循环单链表循环双链表循环双链表的初始化循环双链表的插入循环双链表的删除静态链表什么是静态链...
    99+
    2022-11-13
  • 数据结构——链表(java)
    文章目录 链表1. 基本介绍1.1 定义1.2 链表分类3.不带头非循环单链表CURD4.不带头非循环双向链表CURD 链表 1. 基本介绍 1.1 定义 链表是一种物理存储结构...
    99+
    2023-10-02
    数据结构 链表 java
  • JavaScript数据结构之双向链表和双向循环链表的示例分析
    这篇文章主要为大家展示了“JavaScript数据结构之双向链表和双向循环链表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript数据结...
    99+
    2022-10-19
  • Java基础知识精通循环结构与break及continue
    目录前言for循环(常用)1.格式2.控制流程3.注释while循环(常用)1.格式2.执行流程do…while循环执行流程区别break与continue用法brea...
    99+
    2022-11-13
  • java数据结构基础:绪论
    目录基本概念和术语数据数据元素数据项数据对象结构数据结构逻辑结构与物理结构逻辑结构物理结构抽象数据类型总结基本概念和术语 要想知道数据结构是什么,我们首先得去知道,数据和结构是什么;...
    99+
    2022-11-12
  • java数据结构基础:算法
    目录数据结构和算法关系高斯求和算法定义算法的特性算法设计的要求算法效率的度量方法函数的渐进增长总结数据结构和算法关系 虽然这个标题起的叫数据结构,但是我却总结算法。。。我不是没事找抽...
    99+
    2022-11-12
  • Java常见基础数据结构
    目录栈:队列:数组:链表:红黑树:总结栈: stack,又称堆栈,他是运算受限的线性表,其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。 ...
    99+
    2022-11-12
  • JAVA版的数据结构——链表
    目录 1.单向不带头链表 1.1 链表的概念及结构 1.2 代码部分 1.3 完整的全部代码 2. 双向不带头链表 2.1 代码部分 2.2 完整的代码 3. MySingleList与MyLinkedList代码上的区别 4. Link...
    99+
    2023-09-12
    java 数据结构 链表
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作