《Java数据结构与算法》笔记-CH5-链表-3双端链表
/**
* 双端链表的实现
*/
class LinkA {
public long dData;
public LinkA next; public LinkA(long d) {
dData = d;
} public String toString() {
return "[" + dData + "]";
} public void displayLink() {
System.out.println(toString());
}
} class FirstLastList {
private LinkA first;// 头部
private LinkA last;// 尾部 public FirstLastList() {
first = null;
last = null;
} public boolean isEmpty() {
return first == null;
} /**
* 在头部插入节点
*/
public void insertFirst(LinkA l) {
if (isEmpty())
last = l;
l.next = first;
first = l;
} /**
* 在尾部插入节点
*
* @param l
*/
public void insertLast(LinkA l) {
if (isEmpty())
first = l;
else
last.next = l;
last = l;
} /**
* 从头部删除一个节点
*
* @return
*/
public long deleteFirst() {
long temp = first.dData;
if (first.next == null)
last = null;
first = first.next;
return temp;
} public String toString() {
if (isEmpty())
return "{}";
LinkA current = first;
StringBuilder sb = new StringBuilder();
sb.append("{");
while (current != null) {
sb.append(current.toString()).append(",");
if (current.next == null)
break;
else
current = current.next;
}
sb.deleteCharAt(sb.length() - 1);
sb.append("}");
return sb.toString();
} public void displayList() {
System.out.println(toString());
}
} public class FirstLastListDemo {
public static void main(String[] args) {
FirstLastList fll = new FirstLastList();
for (int i = 1; i < 10; i++) {
System.out.println("插入:"+i);
if (i % 2 == 0)//i为偶数调用insertFirst
fll.insertFirst(new LinkA(i));
else//i为基数调用insertLast
fll.insertLast(new LinkA(i));
fll.displayList();
}
System.out.println("插入完毕开始从头部删除");
while(!fll.isEmpty()){
fll.deleteFirst();
fll.displayList();
}
}
}
《Java数据结构与算法》笔记-CH5-链表-3双端链表的更多相关文章
- java数据结构——单链表、双端链表、双向链表(Linked List)
1.继续学习单链表,终于摆脱数组的魔爪了,单链表分为数据域(前突)和引用域(指针域)(后继),还有一个头结点(就好比一辆火车,我们只关心火车头,不关心其它车厢,只需知晓车头顺藤摸瓜即可),头结点没有前 ...
- Java单链表、双端链表、有序链表实现
单链表: insertFirst:在表头插入一个新的链接点,时间复杂度为O(1) deleteFirst:删除表头的链接点,时间复杂度为O(1) 有了这两个方法,就可以用单链表来实现一个栈了,见htt ...
- Java数据结构和算法 - 链表
Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
- Java数据结构和算法(七)——链表
前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造 ...
- Java数据结构和算法之链表
三.链表 链结点 在链表中,每个数据项都被包含在‘点“中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
- Java数据结构和算法(一)线性结构之单链表
Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...
- Java数据结构与算法(5) - ch05链表(LinkList)
双端链表与传统链表非常相似,但是它有一个新增的特性:即对最后一个链节点的引用,就像对第一个连接点的引用一样.注意与双向链表进行区别.
随机推荐
- BZOJ 3170 松鼠聚会(XY坐标)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3170 题意:给出二维平面上n个点 (xi,yi).求一点t(1<=t<=n) ...
- Html 修改placeholder的颜色属性css样式
项目需求需要修改文本框的placeholder 的文本颜色, 百度下, 备忘,我使用的是这种方法, ::-webkit-input-placeholder { /* WebKit browsers * ...
- [HIHO1328]逃离迷宫(bfs,位压)
题目链接:http://hihocoder.com/problemset/problem/1328 这个题bfs到时候不止要存当前的坐标,还要存当前有哪几把钥匙.因为5把钥匙,所以可以直接用位来存,这 ...
- Java里面instanceof怎么实现的
开始完全一头雾水呀,后面看了Java指令集的介绍,逐渐理解了. https://www.zhihu.com/question/21574535/answer/18998914 下面这个答案比较直白 你 ...
- gdb mysq
1.找到mysqld的id [root@default-tpl ~]# ps aux|grep mysqldroot 5006 0.0 0.0 103252 796 pts/6 S+ 15:15 0: ...
- bzoj4026
直接按照欧拉函数的计算方式来即可 φ=区间积*区间出现(质数-1)的积/区间出现过的质数的积 区间积是满足类似区间减法的操作的(利用逆元) 由于强制在线,上主席树就可以了(维护每个质数上次出现的位置p ...
- HDU 1015 Safecracker
解题思路:这题相当诡异,样例没过,交了,A了,呵呵,因为理论上是可以通过的,所以 我交了一发,然后就神奇的过了.首先要看懂题目. #include<cstdio> #include< ...
- 【英语】Bingo口语笔记(40) - [aʊ]的发音规则
[aʊ]的发音规则 先发音标的音再去拼出单词的读音down
- Ubuntu跬步之图片管理digiKam
Ubuntu下自带了Image Viewer,具备基本的图片浏览功能. 偶尔有些图片需要分组,添加标注,幻灯片浏览等,所以找了款图片管理软件digiKam. 安装 Ubuntu Software Ce ...
- 支持 MBTiles 规范的预缓存
SuperMap iServer 支持生成符合MBTiles规范的预缓存(MBTiles是由MapBox制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用,管理和分享的规范. 该规范由Ma ...