`
128kj
  • 浏览: 600364 次
  • 来自: ...
社区版块
存档分类
最新评论

简单的双向循环链表

 
阅读更多
网上看到的代码,非常不错。只实现了add()和get()方法。
public class LinkedList<E> {

    int size = 0;
    Node<E> head = new Node<E>(null, null, null);

    public LinkedList() {
        head.next = head.previous = head;
    }

    public void add(E date) {
        //核心 循环双向链表
        Node<E> newNode = new Node<E>(head.previous, date, head);   //新节点的prev指向头结点的prev 新节点的next指向头结点
        newNode.previous.next = newNode;    //调整,新节点的前一个的后一个
        newNode.next.previous = newNode;    //调整,新节点的后一个的前一个
        size++;
    }

    public E get(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("Index:" + index + ",size:" + size);
        }
        Node<E> node = head;
        if (index < (size >> 1)) {           
            for (int i = 0; i <= index; i++) {  //head是哑元,i<=index当index=0时,返回head.next
                node = node.next;           //对头结点进行迭代
            }
        }else{
            for(int i=size;i>index;i--){
                node=node.previous;
            }
        }
        return node.getData();
    }

    public int size() {
        return size;
    }

    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        System.out.println("list.get(3)="+list.get(3));
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }


class Node<E> {

    E data;
    Node<E> next;
    Node<E> previous;

    public Node(Node<E> previous, E data, Node<E> next) {
        this.data = data;
        this.next = next;
        this.previous = previous;
    }
    public E getData(){
       return data;
    }

    public void setData(E data){
        this.data=data;
    }
 }


}

运行结果:
C:\test>java   LinkedList
list.get(3)=4
1
2
3
4
5
6
7
8
分享到:
评论

相关推荐

    Linux操作系统中通用双向循环链表的实现分析.pdf

    Linux操作系统中通用双向循环链表的实现分析 Linux操作系统是一个支持多用户、多任务、多线程和多CPU的开源操作系统,其内核功能强大、性能稳定并具有丰富的应用软件支持。Linux内核源代码主要由C语言和少量的汇编...

    航班订票系统(单向,双向循环链表)

    本文将深入探讨如何利用单向链表和双向循环链表来构建这样一个系统。我们将讨论标题中的"航班订票系统"、"单向链表"和"双向循环链表"这些核心概念。 首先,我们来看"单向链表"。单向链表是一种线性数据结构,每个...

    数据结构课程设计报告基于双向循环链表的通讯录设计

    ### 数据结构课程设计报告:基于双向循环链表的通讯录设计 #### 概要设计 在沈阳航空航天大学的计算机学院,计算机科学与技术专业的学生冯读庆在其数据结构课程设计中,选择了一个既具挑战性又实用的项目——基于...

    双向循环链表来实现长整数四则运算

    在本实验中,我们利用双向循环链表来实现长整数的存储和四则运算,特别是加法和减法。这种数据结构的选择主要是因为它能够方便地处理长整数的存储和运算过程中的进位和借位操作。 首先,双向循环链表的每个节点仅...

    双向循环链表C++实现

    双向循环链表的遍历相对简单,可以从头节点开始,通过next指针一直遍历到再次到达头节点为止,也可以从尾节点开始,通过prev指针遍历。 在数据结构课程设计中,你可能需要编写包括上述操作在内的各种函数,例如查找...

    双向循环链表(C++)

    以下是一个简单的双向循环链表节点类的C++实现: ```cpp struct Node { int data; Node* prev; Node* next; Node(int d) : data(d), prev(nullptr), next(nullptr) {} }; ``` 接着,我们需要创建一个链表类,...

    带头结点的双向循环链表

    双向循环链表是一种高级的数据结构,常用于需要前后移动指针的场景,如实现LRU缓存淘汰策略、编辑器的撤销重做功能等。本项目以C++语言实现了带头结点的双向循环链表,这将有助于我们深入理解这一概念。 首先,双向...

    双向循环链表C代码实现

    双向循环链表是一种特殊的数据结构,它允许我们从两个方向遍历元素。与单向链表不同,双向循环链表的每个节点都有两个指针,一个指向其前一个节点,另一个指向其后一个节点。这种结构在实现队列、栈和其他高级数据...

    双向循环链表源码

    下面是一个简单的C++实现双向循环链表的源码示例: ```cpp struct Node { int data; Node* prev; Node* next; }; class DoublyCircularLinkedList { public: DoublyCircularLinkedList() : head(nullptr), ...

    双向循环链表在 LINUX kernel 中的实现

    通过对具体示例的分析,我们可以发现,虽然 Linux 内核中的双向循环链表实现看似简单,但实际上蕴含了许多优化技巧。这种设计既节省了内存空间,又提高了链表操作的效率,为内核中的各种数据管理任务提供了强大的...

    C语言版双向循环链表 双向循环链表经典程序

    C语言版双向循环链表,双向循环链表经典程序,用于指针进行编写的C语言程序。。。

    华科计算机学院数据结构实验报告 双向循环链表

    【双向循环链表】是一种特殊的数据结构,它允许节点在链表中前后两个方向移动。在华科计算机学院的数据结构实验中,学生们被要求实现一个使用C++编程的双向循环链表,包括一系列操作,如创建、销毁、置空、求长度、...

    双向循环链表的C++实现

    《双向循环链表的C++实现详解》 双向循环链表是一种高级的数据结构,它不仅包含了一般单向链表的特性,还允许从链表的任一节点出发,既能向前遍历也能向后遍历。在C++中实现双向循环链表,需要对链表的节点结构和...

    用C++实现的双向循环链表

    - 以下是一个简单的代码片段,展示如何创建一个双向循环链表: ```cpp int main() { DblList list; list.CreatDblList(list.first); list.output(list.first); list.addToHead(list.first); list.addToTail...

    单链表实现双向循环链表_链表_

    单链表实现双向循环链表单向链表存在一个弊端就是,当需要获取某个结点p的前驱时,需要从头指针开始遍历链表,获得“前驱”的执行时间为O(n),为了克服单向链表的这种缺点,可以利用双向链表。在双向链表中有两个...

    用C++写的双向循环链表派生栈和队列

    本文将详细讨论如何使用C++实现一个基于双向循环链表的派生栈和队列。 首先,我们要理解双向循环链表的基本概念。双向循环链表是一种链式存储结构,每个节点包含数据和两个指针,分别指向其前一个节点和后一个节点...

    C++双向循环链表的基本操作

    **C++ 双向循环链表的基本操作** 在C++编程中,数据结构是至关重要的一个部分,其中链表作为一种动态数据结构,被广泛应用于各种算法和程序设计中。双向循环链表是一种特殊的链表类型,它允许在链表中的元素之间...

    利用双向循环链表实现快速排序算法

    利用了双向循环链表实现了快速排序算法

    一个精简的双向循环链表

    一个精简的双向循环链表C语言实现,与大家共享

Global site tag (gtag.js) - Google Analytics