重走算法路之双向链表

       前面翘的链表是单向的,也就是只能从一头开始遍历和操作,每个节点用next关联到下一个节点,今天把双向的敲了一下双向的就多了一个previous,用它来关联它的上一个节点,这样,链表可以实现从前面操作,也可以从后面操作,单向的链表也就是只有一个头,双向的链表就是两个头从哪个头都可以对连彼岸进行操作,所谓的操作也就是插入,删除,遍历,打印,等等等等

       下面是代码,还是老样子,先是节点类登场,和单向的节点类唯一的区别就是多了一个用来关联前面节       点 的节点。

public Link previous;  //定义指向前一个节点

 

    具体代码如下:

package 双向链表;

/*
 * 节点类,封装了属性
 * @author TMS
 *
 */
public class Link {
	public long data;
	public Link next; //定义指向下一个节点
	public Link previous;  //定义指向前一个节点
	/*
	 * 初始化节点的属性
	 */
	public Link(long data) {  
		this.data = data;
	}
   
	/*
	 * 打印出每个节点的信息
	 */
    public void displayLink() {
    	System.out.println("data = "+data);
    }
}

  

   接下来是双向链表的类:里面主要的方法有,

public boolean isEmpty()             //判断链表是否为空

public void insertFirst(long value)  //从前面插入

public void insertLast(long value)   //从后面插入

public Link deleteFirst()            //删除前面头的节点

public Link deleteLast()             //删除后面头的节点

public boolean insertAftre(long key, long value)   //插入到指定节点的后面

public Link deletekey(long key)      //删除指定的节点
 
public void displayFd()              //从前面遍历打印

public void  displayBd()             //从后面遍历打印

 

   下面是具体的代码实现:

   

package 双向链表;

public class DoubleLink {
	private Link first;
	private Link last;

	public DoubleLink() {
		first = null;
		last = null;
	}

	public boolean isEmpty() {
		return first == null;
	}

	/*
	 * 在头节点插入
	 */
	public void insertFirst(long value) {
		Link newLink = new Link(value);
		if (isEmpty()) {                     //进行判断如果为空,last为newLink,因为这是从前面插入,所以要求是last为newLink
			last = newLink;
		} else 
			first.previous = newLink;       //不为空的时候,first前'指针'指向新节点
			newLink.next = first;           //新节点指向原来的头
			first = newLink;                //从新将头放到最前面
		
	}

	/*
	 * 在尾节点插入
	 */
	public void insertLast(long value) {
		Link newLink = new Link(value);
		if (isEmpty()) {
			first = newLink;
		} else {
			last.next = newLink;
			newLink.previous = last;
			
		}
		last = newLink; // /
	}

	/*
	 * 删除头节点
	 */
	public Link deleteFirst() {
		Link temp = first;     
		if (first.next == null) {     //如果只有一个节点    
			last = null;              //和上面的从头插入一样,让他的尾节点为空。(这种情况是头和尾在一起)
		} else {
			first.next.previous = null;   //其他情况下,让头节点的下一个节点的前面的节点为空,也就是原来的头节点为空
			first = first.next;           //将头节点移到下一个节点处        
		}
		return temp;                      //返回删除的
	}

	/*
	 * 删除节点
	 */
	public Link deleteLast() {
		Link temp = last;
		if (first.next == null) {
			first = null;
		} else {
			last.previous.next = null;
			last = last.previous;
		}
		return temp;
	}

	/*
	 * 在指定的节点后面插入一个新的节点,key值是原来链表中就有的,用来定位,value是新插入节点的值
	 */
	public boolean insertAftre(long key, long value) {
		Link current = first;
		while (current.data != key) {       //遍历到链表中相应的key处。
			current = current.next;
			if (current.next == null) {
				return false; // 没找到
			}
		}

		Link newLink = new Link(value);     //初始化新的节点

		if (current == last) {             //如果到key是最后的尾节点
			newLink.next = null;           //新节点的next为空
			last = newLink;                //last定位到最后新插入的节点处
		}

		else {                             //key在头或中间的时候
			newLink.next = current.next;   //新节点的next等于key对应的当前节点(current)的next
			current.next.previous = newLink; //当前key对应的节点的next节点的previous(前节点)指向新的节点
		}
 
		newLink.previous = current;        //通过上面的一连串之后,最后将新节点的previous指向key对应的当前节点(current)
		current.next = newLink;			   //当前节点(key对应)的next指向新的节点
		return true;
	}

	/*
	 * 删除指定 值的节点 key为节点对应的值
	 */
	public Link deletekey(long key) {
		Link current = first;
		while (current.data != key) {   //遍历链表锁定到key对应的节点处
			current = current.next;
			if (current == null) {      //到最后了都没有找到相应的节点
				return null;            // 没找到返回null
			}
		}

		if (current == first) {         //经过遍历如果在第一个节点处
			first = first.next;         //将头节点移到下一个节点处
		} else {                        //其他的情况下,当前节点的上一个节点的下一个节点 指向当前的节点的下一个节点
			current.previous.next = current.next;  
		}

		if (current == last) {          //经过遍历如果在尾节点处
			last = current.previous;    //直接将尾节点移动到当亲节点的前一个节点处
		}

		else {                          //其他情况下,也就是key对应的节点在链表中间的时候
			current.next.previous = current.previous; //当前节点的下一个节点的前一个节点指向当前节点的前一个节点,跳过了当前节点
		}

		return current;
	}

	/*
	 * 从头节点开始打印链表的数据
	 */
	public void displayFd() {
		System.out.println("从头往后面打印节点");
		Link current = first;
		while (current != null) {     //从头开始遍历
			current.displayLink();
			current = current.next;
		}
	}
	
	/*
	 * 从尾节点开始打印链表的数据
	 */
	public void  displayBd() {
		System.out.println("从后往前打印节点");
		Link current = last;
		while(current != null) {    //从尾节点开始遍历
			current.displayLink();
			current = current.previous;
		}
	}
	
	
	/*
	 * 测试方法
	 */
	public static void main(String[] args) {
		DoubleLink dl = new DoubleLink();
		
		//从前面插入节点
		dl.insertFirst(1);
		dl.insertFirst(2);
		dl.insertFirst(3);
		
		//从前面打印节点
		dl.displayFd();
		
		//从后面插入节点
		dl.insertLast(4);
		dl.insertLast(5);
		dl.insertLast(6);
		
		//从前面和后面打印节点
		dl.displayFd();
		dl.displayBd();
		
		System.out.println("删除节点:");
		//从前面和后面打印节点
		dl.deleteFirst();
		dl.deleteLast();
		
		dl.displayFd();
		dl.displayBd();
		
		//在链表中找到相应的值再在后面插入节点
		dl.insertAftre(1, 1222);
		dl.displayFd();
	}

}

 

PS: 

 以上的方法基本包括了链表操作的所有的方法,只是基本,我暂时不知道链表还能怎么玩,一天一天的 写,  最大的感受就是自己越来越爱写注释了,希望把每一步都能写清楚,这应该也是一点进步哈。

洗洗睡觉,又那么晚了⊙﹏⊙

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
# 智慧旅游解决方案摘要 智慧旅游解决方案旨在通过新一代信息网络技术和装备,实现旅游服务、管理、营销和体验的智能化。该方案响应国家政策背景,如国家旅游局和工业信息化部的指导意见,以及国家发改委的发展规划,强调数字化、网络化、智能化在旅游业的应用,推动5G和移动互联网技术在旅游领域的创新应用。 方案的建设目标围绕“一个中心、四个方面、五大平台”展开,即以智慧旅游数据中心为核心,面向服务、管理、商务和营销构建智慧景区管理平台、智慧旅游服务平台、智慧旅游商务平台和智慧旅游营销平台。这五大平台将整合全域旅游资源,提升旅游设施,拓展旅游空间,融合旅游产业链,提升旅游服务,定制旅游产品,推进旅游改革。 建设内容涵盖了整体架构的构建,包括智慧服务、智慧管理、电子商务和智慧营销等方面。通过云计算、人工智能、大数据、物联网、5G等技术,实现“云-管-端”服务能力,打造集时间、空间、层次为一体的体验平台。此外,还包括智慧景区管理平台的多个子系统,如视频监控、应急指挥调度、流量监测、舆情监督、线SOS一键呼救、GIS人车调度、停车场管理、语音广播、环境监测管理、多媒体发布、电子巡更以及指挥调度大屏建设等。 智慧旅游服务平台则包括自助票务系统、人脸识别、扫码购票、景区门户网站、机游、WIFI覆盖系统、数字全景VR、AI机器人、智慧座椅、智慧厕所等,旨在提升游客体验,实现景区的智能化管理和服务。通过这些服务,游客可以享受到便捷的购票、入园、导览和信息服务,同时景区管理者能够更有效地监控和管理景区运营。 智慧旅游商务平台则侧重于旅行社团队申报、电子商城、综合票务系统、分销管理系统、大会员系统和景区聚合支付系统,为旅游企业提供全面的商务服务和营销支持。这些平台和系统帮助旅游企业拓宽分销渠道,实现财务管理和订单管理,同时为游客提供便捷的支付和会员服务。 最后,智慧营销平台通过综合票务系统、分销管理系统、大会员系统和景区聚合支付系统,为旅游行业提供精准的营销工具和策略。这些工具和策略有助于整合旅游资源,拓宽销售渠道,提升游客体验,实现旅游业务的数字化和智能化。 智慧旅游解决方案通过这些综合性的技术和平台,不仅提升了游客的旅游体验,还为旅游行业的可持续发展提供了强有力的技术支持和数据驱动的决策依据。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值