双向循环链表的实例

关于123456输出456123的改进:
在第一篇博客中,使用了数组的方法,在过程中,通过创建一个中间变量来覆盖每个数组位置的值,来达到数据的更新,但这种大的变动在使用中,会很繁琐,每输出一种形式就需要重新改变数据,而这很明显是一个输出的问题,而不应该改变数据本身的值。
因此在循环链表中可以很好的解决这种问题。循环链表中,,每个结点的数据不需要改变,而通过让改变标记第一个输出数据的位置,即可完成按一定顺序输出。
代码如下:
链表初始化,使得26个英文字母存入链表,并使得最后一结点连向头结点的下一结点,成为双向循环链表。

 DNode root;//输入3实现DEFGHLMJKLMNOPQRSTUVWXYZABC的输出//输入-3实现XYZABCDEFGHLMJKLMNOPQRSTUVW的输出public void test_init(){root =new DNode();//初始化为双向循环链表,头结点的pre指向尾结点root.setData(null);root.next=root;root.pre=root;char word='A';for(int i=0;i<=25;i++){DNode dNode=new DNode(word++);dNode.next=root;dNode.pre=root.pre;root.pre.next=dNode;root.pre=dNode;System.out.print(dNode.getData()+",");}root.pre.next=root.next;root.next.pre= root.pre;}

输出模块:
当输入正数时,表示从第n+1个结点开始输出,
当输入负数时,表示从第倒数n个结点开始输出,
如 3 ,DEFG…ABC
-3 ,XYZABC…
定义两个指针,指向需要输出的位置,一个用来标记第一个输出的位置,另一个指针来指向当前输出结点。

public void test_print(int n){int i=0;DNode pnode=new DNode();//pnode1指向输出位置DNode pnode1=new DNode();pnode.next=root.next;if(n>=0){while(i<n){pnode.next=pnode.next.next;i++;}pnode1.next=pnode.next;while (pnode.next.next!=pnode1.next){System.out.print(pnode.next.getData()+",");pnode.next=pnode.next.next;}System.out.print(pnode.next.getData());}if(n<0){while(i>n){pnode.next=pnode.next.pre;i--;}pnode1.next=pnode.next;while (pnode.next.next!=pnode1.next){System.out.print(pnode.next.getData()+",");pnode.next=pnode.next.next;}System.out.print(pnode.next.getData());}}

运行结果如下:

双向循环链表(关于123456输出456123问题的改进)相关推荐

  1. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  2. Python创建一个循环链表、双向循环链表

    循环链表与双向循环链表 循环链表 循环链表相较于单链表,将末尾结点的连接域指向了头结点,就类似于将播放器的顺序播放改成了列表循环 双向循环链表 双向链表相较于之前的链表多了上一节点连接域,在双向链表中 ...

  3. HNCU 1328: 算法2-18~2-19:双向循环链表

    <数据结构> 2.3 循环链表 http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id= ...

  4. 学生管理系统——基于双向循环链表

    基于双向循环链表实现的学生管理系统,包括初始化,插入,删除,查抄,保存,自动按照姓名排序功能,退出并保存功能. 实现思想是将程序的各个部分划分为三个层次.主函数为界面层,即客户端层:其中后缀为Stud ...

  5. 数据结构与算法 | 带头双向循环链表

    上一节里实现的是最简单的链表,在实际中那种链表不会单独用来存储数据,更多是作为其他数据结构的子结构,如图的邻接表等.而比较常用的就是带头双向循环链表. 通过对比我们可以看出有三个不同,多了头节点,链表 ...

  6. 顺序表、链表、双向循环链表

    顺序表.链表.双向循环链表 SeqList.h #pragma once #include<stdio.h>#define ListSize 100 //线性表的最大长度 typedef ...

  7. java循环单链表类构造函数_C++实现双向循环链表

    本文实例为大家分享了C++实现双向循环链表的具体代码,供大家参考,具体内容如下 一.概念 1.在双链表中的每个结点应有两个链接指针: lLink -> 指向前驱结点  (前驱指针或者左链指针) ...

  8. 数据结构基础(12) --双向循环链表的设计与实现

    双向链表的操作特点: (1) "查询" 和单链表相同; (2)"插入" 和"删除"时需要同时修改两个方向上的指针. 但是对于双向循环链表则在 ...

  9. 双向循环链表中结点的交换(C++)

    描述 利用双向循环链表表示一个整数序列,指定一个结点位置用p指向该结点,交换p所指向的结点及其前驱结点的顺序. 输入 多组数据,每组数据有三行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用 ...

最新文章

  1. 面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)...
  2. 利用Github搭建自己的图床
  3. 讲解Linux服务器被黑解决方法
  4. Keil uvision 4 MDK 安装教程附免费安装包资源
  5. SpringBoot AOP拦截器
  6. [redis] 分布式 Redis 的 CRUD 实现
  7. 浅析STL allocator
  8. mysql cluster linux_【完美】Mysql-cluster数据库集群搭建(linux)
  9. python 两个列表相互映射_零基础同学,一看就会的Python字典操作指南
  10. 【Gym-101775 L】SOS【思维博弈】
  11. jQuery文档处理程序
  12. 学UI设计要学哪些软件
  13. STM32F103ZET6【标准库函数开发】----- 04串口4的IO口收发数据实验测试
  14. python 新浪邮箱发送邮件
  15. css3 缩放scale()方法
  16. 一心多用多线程-线程池ThreadPoolExecutor-看这篇就够了
  17. 做软件测试工程师如何突破月薪20k?
  18. 1688官网以图搜图爬虫案例
  19. python程序怎么运行结果
  20. CSM3416SF兼容MP2451,MCP16301HT-E,LT1933ES6,AOZ1282CI

热门文章

  1. WIN10系统查看开机记录
  2. 表格table设置padding
  3. 分享一下 速营社 作者对网络新人的建议
  4. # 关于给小程序字体加粗
  5. 剑灵系统推荐加点_剑灵3.0版本召唤师天赋加点推荐 50级10星
  6. 应届生 java 期望薪资_2019应届毕业生平均期望薪资8431元,达到这个数难吗?
  7. 牛奶神马搜索权重批量查询软件【SEO必备工具】
  8. 树莓派4B的串口使用,并通过串口与其他设备经过通讯协议发送、接收数据。
  9. 佳博热敏打印机 GP-L80180I 使用
  10. HEVC中,mvd怎么写进码流的?