线性表的顺序存储--
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(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)); } }
实现截图: