数据结构——双端链表(java实现)
2015-11-26 21:57
676 查看
这里双端链表只是比传统链表多了一个对最后一个元素的引用——last
/*
*
*
*demonstrates list with first and last references
*
*/
class Link
{
public long dData;
public Link next;
public Link(long d)
{
dData = d;
}
public void displayLink()
{
System.out.print("{" + this.dData + "}");
}
}
class FirstLastList
{
private Link first;
private Link last;
public FirstLastList()
{
first = null;
last = null;
}
public boolean isEmpty()
{
return first == null;
}
public void insertFirst(long dd) //insert at front of list
{
Link newLink = new Link(dd);
if(this.isEmpty()) //***********somewhat different!
{
first = newLink;
last = newLink;
}
else
{
newLink.next = first;
first = newLink;
}
}
public void insertLast(long dd) //insert at end of list
{
Link newLink = new Link(dd);
if(this.isEmpty())
{
first = newLink; //***********somewhat different
last = newLink;
}
else
{
last.next = newLink;
newLink.next = null;
last = newLink;
}
}
public long deleteFirst()
{
/* by me , I didn't consider when just one element exists in list
Link current = null;
if(this.isEmpty())
{
System.out.println("your list is an empty one!");
return 0;
}
else
{
current = first;
first = first.next;
return current.dData;
}
*/
//by textbook
long temp = first.dData;
if(first.next == null)
{
last = null;
}
first = first.next;
return temp;
}
public void displayList() //display the list;
{
Link current = first;
if(this.isEmpty())
{
System.out.println("The current list is empty, please insert some elements!");
}
else
{
System.out.print("List(first-->last): ");
while(current!=null) //if I write like this: while(current.next!=null) ,I just miss last element in list
{
current.displayLink();
4000
current = current.next;
}
System.out.println("");
}
}
}
public class FirstLastListApp
{
public static void main(String[] args)
{
FirstLastList list = new FirstLastList();
list.insertFirst(100); // insert at front
list.insertFirst(200);
list.insertFirst(600);
list.insertLast(514); //insert at rear
list.insertLast(564);
list.displayList(); //display the list
list.deleteFirst(); //delete two items(elements)
list.deleteFirst();
list.displayList(); //display again
}
}运行效果:
/*
*
*
*demonstrates list with first and last references
*
*/
class Link
{
public long dData;
public Link next;
public Link(long d)
{
dData = d;
}
public void displayLink()
{
System.out.print("{" + this.dData + "}");
}
}
class FirstLastList
{
private Link first;
private Link last;
public FirstLastList()
{
first = null;
last = null;
}
public boolean isEmpty()
{
return first == null;
}
public void insertFirst(long dd) //insert at front of list
{
Link newLink = new Link(dd);
if(this.isEmpty()) //***********somewhat different!
{
first = newLink;
last = newLink;
}
else
{
newLink.next = first;
first = newLink;
}
}
public void insertLast(long dd) //insert at end of list
{
Link newLink = new Link(dd);
if(this.isEmpty())
{
first = newLink; //***********somewhat different
last = newLink;
}
else
{
last.next = newLink;
newLink.next = null;
last = newLink;
}
}
public long deleteFirst()
{
/* by me , I didn't consider when just one element exists in list
Link current = null;
if(this.isEmpty())
{
System.out.println("your list is an empty one!");
return 0;
}
else
{
current = first;
first = first.next;
return current.dData;
}
*/
//by textbook
long temp = first.dData;
if(first.next == null)
{
last = null;
}
first = first.next;
return temp;
}
public void displayList() //display the list;
{
Link current = first;
if(this.isEmpty())
{
System.out.println("The current list is empty, please insert some elements!");
}
else
{
System.out.print("List(first-->last): ");
while(current!=null) //if I write like this: while(current.next!=null) ,I just miss last element in list
{
current.displayLink();
4000
current = current.next;
}
System.out.println("");
}
}
}
public class FirstLastListApp
{
public static void main(String[] args)
{
FirstLastList list = new FirstLastList();
list.insertFirst(100); // insert at front
list.insertFirst(200);
list.insertFirst(600);
list.insertLast(514); //insert at rear
list.insertLast(564);
list.displayList(); //display the list
list.deleteFirst(); //delete two items(elements)
list.deleteFirst();
list.displayList(); //display again
}
}运行效果:
相关文章推荐
- 数据结构——查找和删除指定连接点(java实现)
- 数据结构之红黑树
- 第十二周--数据结构--图 算法库
- 数据结构——单向传统链表(java实现)
- 【Codeforces Round 333 (Div 2)E】【期望DP概率做法 树状数组转前缀和】Kleofáš and the n-thlon n场比赛m个人获得总名次的期望
- 数据结构之栈
- 【C++】【STL】STL中部分数据结构的通俗化解释
- 数据结构——栈与队列
- 数据结构 — 图 之 拓扑排序 (AOV网)
- 数据结构(Java)——优先队列和堆
- SDUT 3364-数据结构实验之图论八:欧拉回路(并查集)
- SDUT 3363-数据结构实验之图论七:驴友计划(最短路_dijkstra)
- SDUT 3362-数据结构实验之图论六:村村通公路(最小生成树_prim)
- SDUT 3361-数据结构实验之图论四:迷宫探索(dfs)
- 《大话数据结构》之Prim算法
- 文章标题
- 数据结构与算法(1)——分解质因数及各种方法求最大公约数
- 《大话数据结构》之广度优先遍历
- 《大话数据结构》之图的深度优先遍历
- 数据结构实验之图论八:欧拉回路