记录我学习数据结构之路(九)

双端链表跟传统的单链表不同的地方是,单链表就只有一个first指向头结点的,而双端链表不仅有first指向头结点,而且有一个last指向尾结点。

代码展示:

public class Node {
	public int iNum;
	public double dNum;
	public Node next;   //指向下一个结点

	public Node(int i,double d){
		iNum = i;
		dNum = d;
	}

	public void show(){
		System.out.print("{"+iNum+","+dNum+"}");
	}
}
/**
 * 双端链表类:一个指向头节点,一个指向尾结点。插入和删除速度比较快,
 * @author link
 *
 */
public class FirstLastList {
	private Node first;
	private Node last;

	public FirstLastList(){
		first = null;
		last = null;
	}

	public boolean isEmpty(){
		return first == null;
	}
	/*
	 * 前插入:判断链表是否为空,如果为空则把插入数据直接赋予给last,否则把插入节点的next指向
	 * 第一个数据(first),再把插入的数据变为头数据(first = link)
	 */
	public void insertFirst(int i,double d){
		Node link = new Node(i,d);
		if(isEmpty())
			last = link;
		else
			link.next = first;
		first = link;

	}
	/*
	 * 尾插入:判断链表是否为空,如果为空则把插入数据直接赋予给first,否则尾部的next指向插入的数据。然后再         * 把数据变为最后一个(last = link)。
	 */
	public void insertLast(int i,double d){
		Node link = new Node(i,d);
		if(isEmpty())
			first = link;
		else
			last.next = link;
		last = link;
	}

	public Node deleteFirst(){
		Node temp = first;
		if(temp.next == null){
			last = null;
		}
		first = first.next;
		return temp;
	}

	public void display(){
		System.out.print("List(first-->last):");
		Node current = first;
		while(current!=null){
			current.show();
			current = current.next;
		}
		System.out.println();
	}
}
public class FirstLastListApp {
	public static void main(String[] args) {
		FirstLastList list = new FirstLastList();
		list.insertFirst(12, 2.3);
		list.insertFirst(42, 3.5);
		list.insertFirst(89, 12.2);
		list.insertFirst(41, 5.5);
		list.insertFirst(21, 2.8);
		list.insertFirst(43, 2.2);
		list.insertFirst(67, 6.9);
		list.display();
		list.deleteFirst();
		list.display();
		list.insertLast(23, 3.5);
		list.insertLast(54, 4.5);
		list.display();
	}

}

测试结果:

List(first-->last):{67,6.9}{43,2.2}{21,2.8}{41,5.5}{89,12.2}{42,3.5}{12,2.3}

List(first-->last):{43,2.2}{21,2.8}{41,5.5}{89,12.2}{42,3.5}{12,2.3}

List(first-->last):{43,2.2}{21,2.8}{41,5.5}{89,12.2}{42,3.5}{12,2.3}{23,3.5}{54,4.5}

时间: 2024-10-07 04:43:30

记录我学习数据结构之路(九)的相关文章

记录我学习数据结构之路(七)

直接插入排序的基本操作:将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表. 这是书上写的操作,他是把数组的第一个位置空出来,从第二个位置开始开始放入数据,那么空出来的第一个位置就是用来暂时存放取出来的数值的.从数组的第三个位置开始取,取出来之后向前遍历,如果前一个值比它大,那么前一个人往后移动一位,直到找到不比取出来的数值大的,然后就把取出来的值插入那个值后面. 我就不用数组的第一个值作存放取出值了,数组从0位开始存,另外再声明了一个变量来存放取出来的值: public

记录我学习数据结构之路(二)

算法的定义:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 算法的特性:输入.输出.有穷性.确定性和可行性.输入和输出:算法具有零个或多个输入和输出.有穷性:算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成.确定性:算法的每一步骤都具有确定的含义,不会出现二义性.可行性:算法的每一步都必须的可行的,也就是说,每一步都能通过执行有限次数完成. 算法的设计要求:1.正确性:算法至少应该有输入.输出和加工处理无歧义性

记录我学习数据结构之路(八)

线性表的顺序存储的缺点就是插入和删除的时候需要移动大量的数据,这是非常耗时间的.那应该换一种思路,在第一个元素的时候,就知道第二个元素的位置:在第二个的时候就找到了第三个的位置,以此类推.这样,只要记录下下一个的位置了,不管数据存在哪里,都能顺利地找到下一个结点的位置. 代码实现: /***  * 单链表节点类  * @author link  *  */ public class Node { public int iNum; public double dNum; public Node n

记录我学习数据结构之路(四)

首先写一个数组类(这个是按照从小到大排列的数组).插入操作:遍历整个数组,当找到该数据比要插入的数据后就跳出循环,然后从最后一个数据向前遍历,直到遍历到刚刚找到的那个数据项为止,每个数据往后移动一位,最后就往找到的那个位置插入该数值.删除操作:遍历数组,找到要删除的数据项,删除.查找操作:用二分查找法,每次都找到数据中间的一项,如果该项比要查找的数据大,那么把后一般的数据去掉,保留前一半的数据,然后再找前一半数据的中间项,重复这个方法直到找到为止. public class OrderArray

记录我学习数据结构之路(六)

选择排序思路:不像冒泡排序那样每次找到比它小的就交换,而是要选择最小的,只交换一次就够了. 代码实现如下: public void sort(){ int out,in,min; for(out = 0; out < nElement; out++){ min = out; for(in = out+1; in < nElement; in++){ if(a[in] < a[min]){ min = in; } } swap(out,min); } } 选择排序最大的特点就是交换移动数据

19. 蛤蟆的数据结构进阶十九外部排序相关概念

19. 蛤蟆的数据结构进阶十九外部排序相关概念 本篇名言:"一个人最怕不老实,青年人最可贵的是老实作风. "老实 " 就是不自欺欺人,做到不欺骗人家容易,不欺骗自己最难. "老实作风 " 就是脚踏实地,不占便宜.世界上没有便宜的事,谁想占便宜水就会吃亏. --徐特立" 之前我们学习的排序都是内部排序的,接下去来看下外部排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47

数据学习---数据结构1

学习数据结构,对数据结构的一些总结和相关东西的记录. 数据是指能输入到计算机中并能被计算机程序处理的符号的总称. 数据元素是数据的基本单位,作为一个整体进行处理. 数据项是构成数据元素不可分割的最小单位. 数据<---(基本单位)数据元素<---(可由若干个数据项组成)数据项 -------------------------------------------------------- 数据对象是具有相同性质的数据元素的集合,它是数据的子集. 数据结构是相互之间存在着某种关系的数据元素的集合

QTP,自动化测试学习笔记,六月九号

测试自动化实现的两个难点 设计--功能分解 实现--对象的识别 测试自动化实现的两个难点-功能分解 清晰画出业务流程图 根据业务流程分解业务功能,可以被复用的功能也要被分解出来. 按照路径覆盖的思想,组织测试用例 测试自动化实现的两个难点-对象识别 创建测试    获取被操作对象的属性信息 使用唯一的对象名在对象仓库中记录该对象. 标识关键属性信息 在脚本中记录对象名称和相应的动作. 运行测试 从脚本中获得对象名称. 在对象仓库中定位对象,并获取其关键属性. 根据关键属性信息在被测应用中定位对象

在Object-C中学习数据结构与算法之排序算法

笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速排序 双路快速排序 三路快速排序 堆排序 总结与收获 参考与阅读 选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n2) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧. 1.算法步骤 首先在未排序序列中找到最小(大)元素,存放到排