package hehaiwen;
public class DLinkList {
DLinkList prior;
DLinkList next;
Object o;
DLinkList()
{
}
DLinkList(DLinkList prior,DLinkList next,Object o)
{
this.prior=prior;
this.next=next;
this.o=o;
}
}
package hehaiwen;
public class DoubleLinkList {
DLinkList dl;
public DoubleLinkList()
{
dl=new DLinkList();
dl.next=dl;
dl.prior=dl;
}
public void insert(Object o)
{
DLinkList tmp=dl;
while(tmp.next!=dl)
{
tmp=tmp.next;
}
DLinkList s=new DLinkList();
s.o=o;
s.next=tmp.next;
dl.prior=s;
tmp.next=s;
s.prior=tmp;
}
public void insert(int index,Object o)
{
DLinkList tmp=dl;
int j=0;
while(j<index-1)
{
tmp=tmp.next;
++j;
}
DLinkList s=new DLinkList();
s.o=o;
s.next=tmp.next;
tmp.next.prior=s;
tmp.next=s;
s.prior=tmp;
}
public void delete(Object o)
{
int j=0;
DLinkList tmp=dl;
while(tmp.next!=dl)
{
if(tmp.o==o)
{
delete(j);
}
j++;
tmp=tmp.next;
}
}
public int getSize()
{
int j=0;
DLinkList tmp=dl;
while(tmp.next!=dl)
{
j++;
}
return j;
}
public Object find(int index)
{
DLinkList tmp=dl;
int j=0;
while(tmp.next!=dl&&j<index-1)
{
j++;
tmp=tmp.next;
}
return tmp.next.o;
}
public void delete(int index)
{
int j=0;
DLinkList tmp=dl;
while(j<index-1)
{
tmp=tmp.next;
++j;
}
tmp.next=tmp.next.next;
tmp.next.next.prior=tmp;
}
public void display()
{
DLinkList tmp=dl;
while(tmp.next!=dl)
{
System.out.println(tmp.next.o);
tmp=tmp.next;
}
}
public static void main(String args[])
{
DoubleLinkList dl=new DoubleLinkList();
dl.insert(2);
dl.insert(3);
dl.insert(4);
dl.insert(5);
dl.insert(6);
dl.insert(2, 22);
dl.delete(3);
dl.delete(new Integer(2));
dl.display();
System.out.println(dl.find(2));
System.out.println(dl.find(5));
}
}
分享到:
相关推荐
Linux操作系统中通用双向循环链表的实现分析 Linux操作系统是一个支持多用户、多任务、多线程和多CPU的开源操作系统,其内核功能强大、性能稳定并具有丰富的应用软件支持。Linux内核源代码主要由C语言和少量的汇编...
本文将深入探讨如何利用单向链表和双向循环链表来构建这样一个系统。我们将讨论标题中的"航班订票系统"、"单向链表"和"双向循环链表"这些核心概念。 首先,我们来看"单向链表"。单向链表是一种线性数据结构,每个...
### 数据结构课程设计报告:基于双向循环链表的通讯录设计 #### 概要设计 在沈阳航空航天大学的计算机学院,计算机科学与技术专业的学生冯读庆在其数据结构课程设计中,选择了一个既具挑战性又实用的项目——基于...
在本实验中,我们利用双向循环链表来实现长整数的存储和四则运算,特别是加法和减法。这种数据结构的选择主要是因为它能够方便地处理长整数的存储和运算过程中的进位和借位操作。 首先,双向循环链表的每个节点仅...
双向循环链表是一种高级的数据结构,常用于需要前后移动指针的场景,如实现LRU缓存淘汰策略、编辑器的撤销重做功能等。本项目以C++语言实现了带头结点的双向循环链表,这将有助于我们深入理解这一概念。 首先,双向...
双向循环链表是一种重要的数据结构,它在计算机科学和编程中有着广泛的应用。与单向链表不同,双向循环链表允许元素在正向和反向两个方向上进行遍历,这种特性使得它在需要频繁地进行前向或后向移动操作时特别有用。...
双向循环链表是一种特殊的数据结构,它扩展了单链表的概念,允许在链表的任一位置进行前向和后向遍历。在这个话题中,我们将深入探讨如何使用C++来实现双向循环链表,并涵盖其主要功能,如定点插入、定点删除以及...
双向循环链表是一种特殊的数据结构,它允许我们从两个方向遍历元素。与单向链表不同,双向循环链表的每个节点都有两个指针,一个指向其前一个节点,另一个指向其后一个节点。这种结构在实现队列、栈和其他高级数据...
本文将深入探讨双向循环链表的原理、实现方式以及其在实际应用中的价值。 双向循环链表是一种特殊的链表类型,与普通的单向链表不同,它具有两个指针,一个指向前一个节点,另一个指向后一个节点。这种设计使得在...
### 双向循环链表在 LINUX Kernel 中的实现 #### 一、引言 双向循环链表作为一种常用的数据结构,在 Linux 内核中扮演着重要角色。与传统的链表实现不同,Linux 内核中的双向循环链表采用了更加高效且灵活的设计...
本文将深入探讨“简单的双向循环链表”,并结合提供的`LinkedList.java`源码来理解其实现原理。 双向循环链表与单向链表不同,它在每个节点中不仅保存了指向下一个节点的指针,还保存了指向前一个节点的指针,这种...
【双向循环链表】是一种特殊的数据结构,它允许节点在链表中前后两个方向移动。在华科计算机学院的数据结构实验中,学生们被要求实现一个使用C++编程的双向循环链表,包括一系列操作,如创建、销毁、置空、求长度、...
【带头结点的双向循环链表数据结构】 在数据结构中,双向循环链表是一种特殊类型的数据结构,它允许从两个方向遍历链表。在本案例中,我们需要使用C++和Java分别实现这种数据结构,并确保它们符合指定的要求。 在...
本文将详细讨论如何使用C++实现一个基于双向循环链表的派生栈和队列。 首先,我们要理解双向循环链表的基本概念。双向循环链表是一种链式存储结构,每个节点包含数据和两个指针,分别指向其前一个节点和后一个节点...
**C++ 双向循环链表的基本操作** 在C++编程中,数据结构是至关重要的一个部分,其中链表作为一种动态数据结构,被广泛应用于各种算法和程序设计中。双向循环链表是一种特殊的链表类型,它允许在链表中的元素之间...
《双向循环链表的C++实现详解》 双向循环链表是一种高级的数据结构,它不仅包含了一般单向链表的特性,还允许从链表的任一节点出发,既能向前遍历也能向后遍历。在C++中实现双向循环链表,需要对链表的节点结构和...
单链表实现双向循环链表单向链表存在一个弊端就是,当需要获取某个结点p的前驱时,需要从头指针开始遍历链表,获得“前驱”的执行时间为O(n),为了克服单向链表的这种缺点,可以利用双向链表。在双向链表中有两个...