您的位置:首页 > 其它

链表结构之单链表

2009-09-01 14:36 99 查看
链表:一种数据存储结构.学链表首先要搞懂数组,按朋友的话说,数组和链表的关系就相当于QQ2008和QQ2009.
除非要通过索引频繁访问各个数据,不然大多数情况下都可以用链表代替数组.
链表部分主要要涉及:单链表,双端链表,有序链表,双向链表和有迭代器的链表(迭代器是用来随机访问链表元素的一种方法).
由于以前贪玩数据结构没上课,现在后悔所以要努力补上.

链结点:在链表中,每个数据项都被包含在"链结点"(Link)中.一个链结点是某个类的对象,这个类可以叫Link.而每个Link对象中又包含着一个对下一个链结点引用的字段(通常叫next).但是链表(LinkList)本身的对象中有一个字段(first)指向第一个链结点的引用.看图会清晰些.
package com.dbstructor.oop2;

// 链接点类
class Link {
public int iData;
public double dData;
public Link next;
public Link(int id, double dd){
iData = id;
dData = dd;
}
public void displayLink(){
System.out.print("{" + iData + "," + dData + "}");
}
}

// 链表First类
class LinkList {
public Link first;
public LinkList () {
first = null;
}
public boolean isEmpty() {
return (first == null);
}
// 添加链结点
public void insertFirst(int id, double dd) {
Link newLink = new Link(id, dd);
newLink.next = first;
first = newLink;
}
// 查找指定链结点
public Link find(int key) {
Link current = first;
while(current.iData != key){
if(current.next == null) {
return null;
}else{
current = current.next;
}
}
return current;
}

// 删除指定的链结点
public Link delete(int key) {
Link current = first;
Link privious = first;
while(current.iData != key) {
if(current.next == null) {
return null;
}else{
privious = current;
current = current.next;
}
}
if(current == first) {
first = first.next;
}else{
privious.next = current.next;
}
return current;
}

// 显示链结点
public void displayList(){
Link current = first;
System.out.print("List: (first ---> last)");
while(current != null) {
current.displayLink();
current = current.next;
}
System.out.println();
}
}
public class LinkListApp {

public static void main(String[] args) {
LinkList aLink = new LinkList();
aLink.insertFirst(22, 22.88);
aLink.insertFirst(44, 44.88);
aLink.insertFirst(66, 66.88);
aLink.insertFirst(88, 88.88);
aLink.displayList();
Link findLink = aLink.find(22);
System.out.print("the Find Item: ");
findLink.displayLink();
System.out.print(" the Del Item: ");
Link delLink = aLink.delete(22);
delLink.displayLink();
System.out.println();
aLink.displayList();
}
}
执行结果:
List: (first ---> last){88,88.88}{66,66.88}{44,44.88}{22,22.88}
the Find Item: {22,22.88} the Del Item: {22,22.88}
List: (first ---> last){88,88.88}{66,66.88}{44,44.88}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: