链表结构之单链表
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}
除非要通过索引频繁访问各个数据,不然大多数情况下都可以用链表代替数组.
链表部分主要要涉及:单链表,双端链表,有序链表,双向链表和有迭代器的链表(迭代器是用来随机访问链表元素的一种方法).
由于以前贪玩数据结构没上课,现在后悔所以要努力补上.
链结点:在链表中,每个数据项都被包含在"链结点"(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}
相关文章推荐
- 数据结构实验之链表五:单链表的拆分 oj
- C语言 链表 数据结构实验之链表五:单链表的拆分
- 2120-数据结构实验之链表五:单链表的拆分
- 【数据结构】单链表—链表中倒数第K个结点 — 快慢指针
- 暑假集训第1天链表-数据结构实验之链表四:单链表的归并
- 【数据结构-单链表】单链表的归并
- 数据结构(第二天)单链表的基本操作,创建单链表,头插法,尾插法,删除节点,查询节点
- SDUT 2120 数据结构实验之链表五:单链表的拆分 解法2
- 数据结构实验之链表五:单链表的拆分
- 数据结构实验之链表五:单链表的拆分
- 数据结构之链表:实现单链表的k逆序(2)
- 数据结构实验之链表五:单链表的拆分
- 数据结构实验值链表五:单链表的拆分
- 数据结构实验之链表五:单链表的拆分
- 【数据结构】单链表—判断一个链表是否形成了环形结构 — 快慢指针
- 【数据结构】单链表—寻找两个相交链表中第一个公共结点 — 蛮力法 / 栈 / 指针先走
- 数据结构实验之链表五:单链表的拆分
- 【数据结构】单链表(一)单链表的定义,插入,删除和查找操作
- 数据结构实验之链表五:单链表的拆分
- 【2120】数据结构实验之链表五:单链表的拆分