数据结构中的一种常用结构.. 链表
这个怕是熟悉的不能再熟悉了,特别是用c++写过代码的选手们..
于是.今天自己实现了一些链表的操作(虽然这些操作在java里有提供方法).但是自己实现来练练手也还是不错的.
以下都是以双链表结构来实现的..
/**
* 链表中的结点数据类
*
* @author ds
*/
public class LinkNode {
// 结点中的数据域
private Object obj;
// 结点中的指针域
private LinkNode next;
private LinkNode prior;
public LinkNode(Object obj) {
this.obj = obj;
}
public LinkNode getPrior() {
return prior;
}
public void setPrior(LinkNode prior) {
this.prior = prior;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public LinkNode getNext() {
return next;
}
public void setNext(LinkNode next) {
this.next = next;
}
}
添加结点的两个方法
public void add(Object obj) {
if (rear == null) { // 如果尾结点为空,说明链表为空,则新添加的结点就既是头结点又是尾结点
LinkNode ln = new LinkNode(obj);
front = ln;
rear = ln;
} else {// 否则接到最后
LinkNode ln = new LinkNode(obj);
rear.setNext(ln);
ln.setPrior(rear);
rear = ln;// 改变尾结点
}
}
public void add(int index, Object obj) {
if (index > size() || index < 0) {
throw new RuntimeException("输入的索引位置错误:" + index);
} else if (index == size()) {
add(obj);
} else {// 索引位置正确的时候
int i = 0;
LinkNode ln_f = front;
while (i < index) {
i++;
ln_f = ln_f.getNext();
}
LinkNode ln = new LinkNode(obj);
if (i == 0) {// 加到第一个位置
ln.setNext(ln_f);
ln_f.setPrior(ln);
front = ln;
} else {
ln.setNext(ln_f);
ln_f.getPrior().setNext(ln);
ln.setPrior(ln_f.getPrior());
ln_f.setPrior(ln);
}
}
}
清除结点的两个方法
public void removed() {
if (rear == null) {
System.out.println("链表中不存在结点..");
} else if (front.equals(rear)) {// 链表中只有一个结点的时候.
front = null;
rear = null;
} else {
// 尾指针指向倒数第二个结点
rear = rear.getPrior();
// 丢掉最后一个结点.
rear.setNext(null);
}
}
public LinkNode removed(int index) {
if (index >= size() || index < 0) {
throw new RuntimeException("输入的索引位置错误:" + index);
} else {// 索引位置正确的时候
int i = 0;
LinkNode ln_f = front;
while (i < index) {
i++;
ln_f = ln_f.getNext();
}
if (i == size() - 1) {// 删除的是最后一个结点的时候
removed();
} else if (i == 0) {// 删除的是第一个结点的时候
front = front.getNext();
} else {
ln_f.getNext().setPrior(ln_f.getPrior());
ln_f.getPrior().setNext(ln_f.getNext());
}
return ln_f;
}
}
得到链表的长度
public int size() {
// 首先长度为1
int i = 0;
LinkNode ln = front;
while (ln != null) {// 当前结点的下一个结点不为空的时候.
ln = ln.getNext();
i++;
}
return i;
}
分享到:
相关推荐
纯c语言链表。
MLDN魔乐JAVA_13链表.rarMLDN魔乐JAVA_13链表.rar
数据结构城市链表.pdf数据结构城市链表.pdf数据结构城市链表.pdf数据结构城市链表.pdf数据结构城市链表.pdf数据结构城市链表.pdf数据结构城市链表.pdf数据结构城市链表.pdf
C语言链表.doc 非常实用C语言链表.doc
线性链表.exe
双链表-循环链表-静态链表.pdf
数据结构第3章链表.pdf数据结构第3章链表.pdf数据结构第3章链表.pdf数据结构第3章链表.pdf数据结构第3章链表.pdf数据结构第3章链表.pdf数据结构第3章链表.pdf数据结构第3章链表.pdf数据结构第3章链表.pdf
遍历数组和链表 数组和链表.pdf
class写的C++链表.cpp
C语言链表.ppt
数组和链表的对比分析 数组和链表.docx
C通用范例源代码之数据结构之链表.pdfC通用范例源代码之数据结构之链表.pdfC通用范例源代码之数据结构之链表.pdfC通用范例源代码之数据结构之链表.pdfC通用范例源代码之数据结构之链表.pdfC通用范例源代码之数据结构...
C语言链表.pdf
python算法-数组和链表 数组和链表.pdf
双向链表.doc复习线性链表的存储结构循环链表的存储结构
JavaSE-数组集合和链表集合 数组和链表.docx
双链表.zip
数组和链表的使用场景 数组和链表.pdf
双链表.py
颠倒链表.cpp