class Node<E>{
E item;
Node prev, next;
Node(E newItem){
item = newItem;
prev = next =null;
}
}
class CircularDoublyLinkedList{
private Node head;
private Node tail;
private int size;
CircularDoublyLinkedList(){
}
void addFirst(Node n){
if(size == 0) head = tail = n;
else if(size == 1){
head = n;
head.next = tail;
head.prev = tail;
tail.prev = head;
tail.next = head;
}
else{
head.prev = n;
n.next = head;
n.prev = tail;
head = n;
tail.next = head;
}
size ++;
}
void addLast(Node n){
if(size == 0) head = tail = n;
else if(size == 1){
head.next = n;
head.prev = n;
n.prev = head;
n.next = head;
tail = n;
}
else {
tail.next = n;
n.prev = tail;
n.next = head;
head.prev = n;
tail = n;
}
size ++;
}
void add(int index, Node n){
if(index == 0) addFirst(n);
else if(index >= size) addLast(n);
else{
Node cur = head;
for(int i = 1; i < index; i++)
cur = cur.next;
Node temp = cur.next;
cur.next = n;
n.prev = cur;
n.next = temp;
temp.prev = n;
size ++;
}
}
Node removeFirst(){
Node remove = head;
if(size == 0) return null;
else if(size == 1)
head = tail =null;
else if(size == 2){
head = tail;
head.prev = null;
head.next = null;
}
else{
Node temp = head.next;
temp.prev = tail;
tail.next = temp;
head = temp;
}
size --;
return remove;
}
Node removeLast(){
Node remove = tail;
if(size == 0) return null;
else if(size == 1)
head = tail = null;
else if(size == 2){
tail = head;
head.prev = null;
head.next = null;
}
else{
Node temp = tail.prev;
temp.next = head;
head.prev = temp;
tail = temp;
}
size --;
return remove;
}
Node remove(int index){
if(index < 0 || index >= size) return null;
else if(index == 0) return removeFirst();
else if(index == size - 1) return removeLast();
else{
Node previous = head;
for(int i = 1; i < index; i ++)
previous = previous.next;
Node remove = previous.next;
Node temp = remove.next;
previous.next = temp;
temp.prev = previous;
size --;
return remove;
}
}
}
- 大小: 10.3 KB
分享到:
相关推荐
this is a template design for doubly linked list. it is just a reference for one who want to study template programming.
标题"DoublyLinkedList-Implementation"表明我们将讨论的是关于双链表的实现,这是一种数据结构,主要用于存储有序序列。双链表在Java编程中是常见的一种链式数据结构,它允许我们在列表的两端进行快速的插入和删除...
"Lab10_doublylinkedlist_" 这个标题暗示我们讨论的是关于链表数据结构的一个实验或练习,具体是双链表(Doubly Linked List)。双链表是一种线性数据结构,每个节点不仅包含数据,还包含两个指针,分别指向其前一个...
在给定的"double_linked_list.rar"文件中,包含了使用双向链表进行排序的实现。排序的目标是将链表中的元素按照数值大小进行排列。这里提到了两种排序算法:选择法和冒泡法。 1. **选择法排序**: 选择法排序是一...
C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码 1 双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一...
在IT领域,双向链表(Doubly Linked List)是一种基本的数据结构,它在C语言中的实现是程序员必备的技能之一。双向链表与单向链表的主要区别在于每个节点不仅包含指向下一个节点的指针,还包含一个指向前一个节点的...
C#,双向链表(Doubly Linked List)快速排序(Quick Sort)算法与源代码。双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始...
C#,递归方法实现双向链表(Doubly Linked List)的反转(Reverse)算法与源代码 递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的...
+ int listSize() + T first() + T last() - void verifySize(int size, int position) - DLNode<T> getNodeAtPosition(int position) + T getElementAtPosition(int position) + void setElementAtPosition(int ...
本主题将深入探讨JavaScript中的两种链表实现:单向链表(LinkedList)和双向链表(DoublyLinkedList)。 单向链表(LinkedList) 单向链表是一种线性数据结构,其中的元素不是在内存中连续存储的。每个节点包含两...
制作一个简易的通讯录,包括基本操作和存储功能。 用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。 设计内容:本系统应完成...
创建一个名为`DoublyLinkedList`的类,它包含头节点(head)和尾节点(tail),并提供初始化方法: ```java class DoublyLinkedList { Node head; Node tail; // 初始化空链表 public DoublyLinkedList() {...
在这个实现中,`DoublyLinkedList`类包含了头节点和尾节点的指针,以及各种对链表的操作方法。`append`方法用于在链表末尾添加新节点,`insertAfter`方法允许在特定节点之后插入新节点,`remove`方法删除给定节点,...
本项目是关于使用 Java 语言实现双向链表(DoublyLinkedList)的一个实例,同时结合了 Maven 作为项目管理工具以及 SonarQube 作为代码质量管理平台,确保代码的质量和规范性。 **Java 双向链表(DoublyLinkedList...
- `4-DoublyLinkedList` 可能包含了双向链表的实现。 - `5-CircularDoublyLinkedList` 应该是双向环形链表的代码实现。 学习这些链表结构,我们需要理解每个节点的结构,如何创建和初始化链表,以及如何进行插入、...
DoublyLinkedList() : head(nullptr) {} ~DoublyLinkedList(); // 插入节点 void insert(T value); // 删除节点 void remove(T value); // 遍历链表 void traverse(); // ...其他操作方法 }; ``` `...
**标题解析:** "Generic-Doubly-Linked-List-..zip_generic" 这个标题表明,这是一个关于泛型(Generic)双向链表(Doubly-Linked List)的资料包,可能是用C或C++语言编写的。"Generic"指的是在编程中使用模板或者...
链表的基本类型包括单向链表(Singly Linked List)和双向链表(Doubly Linked List)。在单向链表中,每个节点只包含一个指向其后继节点的指针;而在双向链表中,除了包含指向后继节点的指针外,每个节点还包含一个...
class DoublyLinkedList: def __init__(self): self.head = None self.tail = None # 插入节点 def insert(self, data, index=None): # ... 实现插入逻辑 ... # 删除节点 def remove(self, value): # ......