双向链表:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
package com.dataStructure.linearTable.doubleLinearTable; public class Student { private int id; private String name; private int score; public Student() { } public Student(int id, String name, int score) { this.id = id; this.name = name; this.score = score; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
package com.dataStructure.linearTable.doubleLinearTable; public class DoubleLinkList { private DoubleLinkList previous = null; private Student student; private DoubleLinkList next = null; public DoubleLinkList() { } public DoubleLinkList(Student student) { this.student = student; } public DoubleLinkList getPrevious() { return previous; } public void setPrevious(DoubleLinkList previous) { this.previous = previous; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public DoubleLinkList getNext() { return next; } public void setNext(DoubleLinkList next) { this.next = next; } }
package com.dataStructure.linearTable.doubleLinearTable; public class Test { public static void main(String[] args) { //创建头节点 DoubleLinkList head = new DoubleLinkList(); Student student1 = new Student(1,"Nicky Zhang",147); Student student2 = new Student(2,"Alice Xu",121); Student student3 = new Student(5,"Avril Lavigne",99); Student student4 = new Student(4,"Britney Spears",127); Student student5 = new Student(3,"Whitney Houston",150); DoubleLinkList item1 = new DoubleLinkList(student1); DoubleLinkList item2 = new DoubleLinkList(student2); DoubleLinkList item3 = new DoubleLinkList(student3); DoubleLinkList item4 = new DoubleLinkList(student4); DoubleLinkList item5 = new DoubleLinkList(student5); add(head, item1); add(head, item2); add(head, item3); add(head, item4); add(head, item5); remove(head, item1); remove(head, item3); getAll(head); } /** * add item * @param head * @param item */ private static void add(DoubleLinkList head, DoubleLinkList item){ if(head == null || item == null){ return; } //头结点 不能动 DoubleLinkList current = head; //check current element if exists boolean flag = false; //check current linkList is Empty if(current.getNext() == null){ current.setNext(item); item.setPrevious(current); }else{ //如果不是空节点,按照顺序来添加 //寻找添加位置 while(current.getNext() != null){ if(current.getNext().getStudent().getId() > item.getStudent().getId()){ break; } if(current.getNext().getStudent().getId() == item.getStudent().getId()){ flag = true; } current = current.getNext(); } if(!flag){ item.setNext(current.getNext()); item.setPrevious(current); current.setNext(item); if(item.getNext() != null){ item.getNext().setPrevious(item); } } } } /** * remove item * @param head * @param item */ private static void remove(DoubleLinkList head, DoubleLinkList item){ if(head == null || item == null){ return; } DoubleLinkList current = head.getNext(); boolean flag = false; while(current != null){ if(current.getStudent().getId() == item.getStudent().getId()){ flag = true; break; } current = current.getNext(); } if(flag){ if(current.getNext() != null){ current.getNext().setPrevious(current.getPrevious()); } current.getPrevious().setNext(current.getNext()); } } /** * Query All Elements * @param head */ private static void getAll(DoubleLinkList head){ DoubleLinkList current = head; while(current.getNext() != null){ System.out.println("ID :"+current.getNext().getStudent().getId()+" Name :"+current.getNext().getStudent().getName()); current = current.getNext(); } } }
相关推荐
http://msdn.microsoft.com/en-us/library/95z04bas(v=VS.71).aspx 双向链表
双向链表的操作问题 Time Limit: 1000MS Memory Limit: 10000KB Submissions: 111 Accepted: 41 Description 建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成...
双向链表
定义、实现并测试一个双向链表结点类DNode。 链表结点类中包含私有数据成员为两个整数x,y以及左结点指针left及右结点指针right。 包含的函数成员包括: (a)对结点的数据成员赋值setDNodeValues(int,int,DNode* ...
详细的介绍了Linux内核中使用的最频繁的双向链表
双向链表类定义及测试文件 对应于数据机构与算法分析(c++版)第三版或第二版 Clifford A.Shaffer 重庆大学使用教材
一种支持类模版和函数模版的C++双向链表,实现了各种排序算法(排序原则可定制),包含学生信息的使用示例(VC 6.0、VS2008).
实现双向链表的增删改查功能,dos窗口输入输出,可运行,有注释
C 语言版 双向链表 #include #include typedef struct list { int date; struct list *llink; struct list *rlink; }st; st *creat () //创建双向链表 { st *head , *p , *q; head = q = p = NULL; int ...
通过建立双向链表,来实现双向查找,增加和删除的功能
双向链表是一种比较常用的数据结构,在许多场合都有应用。但是,双向链表的节点操作,对于初学者来说或许显得比较繁琐。尤其是,当用链表描述不同的数据结构时,节点结构体的定义都是不同的,这就需要为每一种链表都...
使用stm32f103 建立双向链表demo,适用所有链表情况,非常好用,链表部分采用了Linux list
原创手操,操作系统课设,线程安全的双向链表,VC6.0,无须配置,可运行
双向链表 - 数据结构与算法 C 双向链表 - 数据结构与算法 C 。。。。。。
用模板类实现了一个简单的双向链表domo。
用双向链表实现大数阶乘 输入一个不限制大小的数 即可计算出它的阶乘
循环双向链表,实现了插入、查找特定的节点、删除等功能,是自己花了半天的时间写完的。
基于linkedList实现自己的双向链表反转。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
基础数据结构双向链表的C++描述版。实现了双向链表的基本功能。包括拷贝构造函数和IO操作符重载、赋值操作符重载
ALIST是一段基于C语言的数组型双向链表的处理代码,接口简单明了,易于使用,标准C语言开发,可添加在任何C/C++语言工程中,需要注意的是,如果使用了操作系统,请自行在库中修改指向处添加资源锁定,避免因操作系统...