线性表的顺序存储--
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
代码实现的功能包括线性表的初始化,判断是否为空、清空、增加元素、删除元素、合并线性表等操作。
Java代码附上:
package LinkListDemo2;
public class LinkList {
int data;
LinkList next;
/**
* 链表的初始化
*/
public void initLink(LinkList L) {
L = new LinkList();
L.next = null;
}
/**
* 链表的创建(头插法),n插入的元素个数
*/
public void creatListHead(LinkList L, int n) {
InitLink(L);
for (int i = 0; i < n; i++) {
LinkList linkList = new LinkList();
linkList.data = i;
linkList.next = L.next;
L.next = linkList;
}
}
/**
* 链表的创建(尾插法),n插入的元素个数
*/
public void creatListTail(LinkList L, int n) {
InitLink(L);
LinkList P;
P = L;
for (int i = 0; i < n; i++) {
LinkList linkList = new LinkList();
linkList.data = i;
P.next = linkList; // 注意:等号两个不能互调位置
P = linkList; // P移动到新的节点位置
}
P.next = null;
}
/**
* 获取链表的长度
*/
public int getLengthList(LinkList L) {
int count = 0;
LinkList P;
P = L.next;
while (P != null) {
P = P.next;
count++;
}
return count;
}
/**
* 链表的插入 ,n表示插入的位置
*/
public void insertList(LinkList L, int n, int num) {
int count = 0;
LinkList p, s;
p = L;
count = 1;
while (p.next != null && count < n) { // 将p移动到插入的元素的上一位
p = p.next;
count++;
}
if (p == null || count > n) {
System.out.println("不能插入!!");
}
s = new LinkList();
s.data = num;
s.next = p.next;
p.next = s;
}
/**
* 链表的删除 ,n表示删除的位置
*/
public void deleteListElem(LinkList L, int n) {
int count = 0;
LinkList p;
p = L;
count = 1;
while (p.next != null && count < n) { // 将p移动到插入的元素的上一位
p = p.next;
count++;
}
if (p == null || count > n) {
System.out.println("非法删除元素!!");
}
p.next = p.next.next; // Java有着高尚的情操 gc(垃圾回收机制),所以自动内存释放
}
/**
* 清空链表
*/
public void clearList(LinkList L) {
LinkList p, q;
p = L.next;
while (p != null) {
q = p.next; // 调换
p = null; // 清空
p = q; // 重新给p赋值,相当于p移动到下一位
}
L.next = null; // 头节点重新指向空
}
/**
* 前提条件:这个数存在 查找特定的元素 ,查找第四个位置的值,并返回
*/
public int getElem(LinkList L, int n) {
LinkList p;
p = L.next;
int count = 1;
while (p != null) {
if (count == n)
return p.data;
++count;
p = p.next;
}
return 0;
}
/**
* 判断链表是否为空
*/
public boolean elemptyList(LinkList L) {
if (L.next != null)
return false;
else
return true;
}
/**
* 遍历链表
*/
void traverse(LinkList L) {
LinkList linkList;
linkList = L.next;
while (linkList != null) {
System.out.print(linkList.data + " ");
linkList = linkList.next;
}
}
}
测试类:
package LinkListDemo2;
public class test {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.creatListHead(linkList, 5);
System.out.println("头插法--------------");
linkList.traverse(linkList);
System.out.println("");
System.out.println("尾插法--------------");
LinkList linkList2 = new LinkList();
linkList2.creatListTail(linkList2, 5);
linkList.traverse(linkList2);
System.out.println("");
System.out.println("链表2长度:--------------");
System.out.println(linkList2.getLengthList(linkList2));
System.out.println("在链表2的3位置上插入100:--------------");
linkList2.insertList(linkList2, 3, 100);
linkList.traverse(linkList2);
System.out.println("");
System.out.println("删除链表1号元素:--------------");
linkList.deleteListElem(linkList, 1);
linkList.traverse(linkList);
System.out.println("");
System.out.println("判断链表2是否为空:--------------");
System.out.println(linkList2.elemptyList(linkList2));
System.out.println("清空链表2:--------------");
linkList2.clearList(linkList2);
System.out.println("判断链表2是否为空:--------------");
System.out.println(linkList2.elemptyList(linkList2));
System.out.println("查找链表1的3位置的值:--------------");
System.out.println(linkList.getElem(linkList, 2));
}
}
实现截图: