1.线性表是最基本,最简单,也是最常用的一种数据结构,线性表也就是 n 个元素组成的有限序列,有以下几个特征。
对于一个非空的线性表,其逻辑结构如下。
- 有一个开始结点a1没有直接前驱,有且仅有一个后继结点a2。
- 有且仅有一个终结结点an,没有直接后继,有且仅有一个前驱结点a(n-1)。
- 中间结点ai仅有一个前驱结点a(i-1)仅有一个后继结点a(i+1)。
2.线性表的运算
- 初始化。
构造(InitList)一个空的线性表。
计算表长。
也就是(ListLength)计算表中结点个数。
- 获取结点。
(GetNode)返回第i个结点的数据,0<=i<n-1。
- 查找结点
(LocateNode)
查找值为x的结点并返回其在表中的位置,如果未找到则返回相应标志。
- 插入结点(InsertList)
在相应位置插入结点,使得相应位置以后的结点位置+1,表的长度+1。
- 删除结点
和插入操作相反,在特定位置删除结点,使得结点以后的结点位置-1,表的长度-1。
3.下面看一下具体实例(java版)
顺序存储
1 package neuq.chao; 2 import java.util.Scanner; 3 class DATA{ //定义一个线性表存储的数据类型。 4 String name; 5 int age; 6 } 7 8 public class LinerList { 9 //线性表 10 static final int SIZE = 10; //定义线性表最大长度 11 12 DATA[] lisData = new DATA[SIZE+1]; 13 int Lislen; //线性表已有结点长度 14 void InitList(LinerList l){ 15 l.Lislen = 0; //初始化线性表的长度为0 16 } 17 int listLength(LinerList l){ 18 //获取线性表的长度 19 return l.Lislen; 20 } 21 int insertList(LinerList l,int n,DATA data){ //在特定位置插入结点 22 if(l.Lislen>=SIZE){ //线性表已满 23 System.out.print("线性表已满无法插入 "); 24 return 0; //插入失败 25 } 26 if(n<1&&n>SIZE-1){ //插入位置错位 27 System.out.print("插入序号错误: "); 28 } 29 for(int i=l.Lislen;i>n;i--){ //n之后的结点依次向后移 30 l.lisData[i+1] = l.lisData[i]; 31 } 32 l.lisData[n] = data; 33 l.Lislen++; 34 return 1; 35 } 36 int DeleteList(LinerList l,int n){ 37 if(n<1&&n>l.Lislen+1){ 38 System.out.print("要删除的结点序号不正确 "); 39 return 0; //删除失败 40 } 41 for(int i=n;n<=l.Lislen;i++){ 42 l.lisData[i-1] = l.lisData[i]; //n之后的结点依次向前移动 43 } 44 l.Lislen--; 45 return 1; //删除成功 46 } 47 DATA getNode(LinerList l,int n){ 48 if(n<1&&n>l.Lislen){ 49 System.out.print("结点序号错误: "); 50 return null; //获取结点失败 51 } 52 else{ 53 System.out.print("结点数据为: "); 54 System.out.print(l.lisData[n].name+l.lisData[n].age); //打印结点数据 55 } 56 return l.lisData[n]; 57 } 58 int findNode(LinerList l,String name){ 59 int i;//通过name查找结点 60 for(i=1;i<=l.Lislen;i++){ 61 if(!(l.lisData[i].equals(name))){ 62 return i; //找到指定结点 63 } 64 } 65 return 0; 66 } 67 int showAll(LinerList l){ 68 for(int i=1;i<=l.Lislen;i++){ //打印所有结点数据 69 System.out.printf("(%s,%d) ",l.lisData[i].name,l.lisData[i].age); 70 } 71 return 0; 72 } 73 } 74 class SList{ 75 public static void main(String args[]){ 76 Scanner input = new Scanner(System.in); 77 LinerList l = new LinerList(); 78 System.out.print("顺序操作演示 "); 79 l.InitList(l); 80 System.out.print("初始化成功 "); 81 DATA data = new DATA(); 82 System.out.print("输入要插入数据"); 83 data.name = input.next(); 84 data.age = input.nextInt(); 85 int n = input.nextInt(); 86 if((l.insertList(l,n,data))!=0){ //插入操作演示 87 System.out.print("插入成功"); 88 } 89 } 90 }