1.顺序存储结构
-
顺序存储结构,即数组。优点:节省存储空间,随机存取表中元素;缺点 :插入和删除操作需要移动元素
-
顺序存储结构的插入与删除操作代码实现
/**
* 顺序链表的插入
* @param data
*/
public void insert(int data){
if (length >= size){
return;
}
if (0 == length){
datas[length++] = data;
return;
}
int location = length;
for (int i=0;i<length;i++){
if (datas[i] > data){
location = i;
break;
}
}
for (int i=length-1;i>=location;i--){
datas[i+1] = datas[i];
}
datas[location] = data;
length++;
}
/**
* 顺序链表的删除
* @param data
*/
public void remove(int data){
if (0 == length){
return;
}
int location = -1;
for(int i=0;i<length;i++){
if (datas[i] == data){
location = i;
break;
}
}
if (location == -1){
return;
}
for (int i=location;i<length-1;i++){
datas[i] = datas[i+1];
}
length--;
}
2.链式存储结构
-
链式存储结构:用一组任意的存储单元存储线性表的数据元素,分为单链表、双链表、循环链表。逻辑上相邻的节点物理上不必相邻,每个结点是由数据域和指针域组成。
-
链式存储结构的优点: 插入、删除开销小(不必移动节点,只要改变节点中的指针)。缺点 :查找结点时链式存储要比顺序存储慢。
2.1 单链表的插入删除、链表逆置、判断有环
/**
* 1.插入节点
* @param data 插入值
*/
public void insert (int data){
Node node = new Node(data);
if (null == this.head){
this.head = node;
return;
}
Node tmp = head;
while(tmp.next != null){
tmp = tmp.next;
}
// 添加新的节点到链表末尾
tmp.next = node;
}
/**
* 2.删除节点
* @param data 删除节点的值
*/
public void remove(int data){
if (null == this.head ){
return;
}
if (this.head.getData() == data){
this.head = this.head.getNext();
return;
}
Node p = this.head;
while(null != p.getNext()){
if (p.getNext().getData() == data){
break;
}
p = p.getNext();
}
if (null != p.getNext()){
p.setNext(p.getNext().getNext());
print();
}
}
/**
* 输出链表元素
*/
public void print(){
Node p = this.head;
while(null != p){
System.out.print(p.getData()+"->");
p = p.getNext();
}
}
/**
* 3.链表逆序
*/
public void reverseLinkList() {
if (head == null || head.getNext() == null) {
return<