线性表是最简单,最基本,也是最常见的一种线性结构。它有两种存储方式:顺序存储和链式存储。它的基本操作主要是插入、删除和检索等。

线性表的用途广泛,应用于信息检索、存储管理、模拟技术和通信领域。软件工程的初学者可能会忽视数据结构这门课程,而把更多的精力集中在高级语言的课程上,其实这是一个很严重的误解。

本篇是我个人对于线性表的初步理解,望各位大佬发表高见,多多指教。这里的编程语言我选择Java。

接下来演示ArrayList数组实现顺序表的增删查改,代码和实验结果如下:

 

首先先建立一个学生类并建立相应的Getters/Setters方法和ToString方法(这里省略):

public class Student {

  private String name;

  private  int number;

  private String major;}



然后建立一个测试类MainText,在该类中实现对ArrayList数组的增删查改,代码如下:

public class MainText {

     public static  Boolean IsEmpty(ArrayList list){

   if(list.size()==0)

   {

return true;   

   }

  return false;

  }

public static int ListSize(ArrayList list)

  {

  if(IsEmpty(list))

  {

  return 0;

  }

  return list.size();	  

  }

 public static boolean Del(ArrayList list,int i)

 {

 if(IsEmpty(list))

 {

 return false;

 }

 else

 {     list.remove(i);

 return false;

 }

 }

 public static String dispaly(ArrayList list,int i)

  {

  if(i>list.size()&&i<0)

  {

  return null;

  }

  else

  {   

  return list.get(i).toString();

  }	  

  }

  public static void Add(int i,ArrayList list,ArrayList array)

  {

 list.add(i, array);

  }

  public static void Change(int i,ArrayList list,ArrayList array)

  {

  list.set(i, array);

  }

public static void main(String []args){

      ArrayList list=new ArrayList();

      Student [] stu=new Student[11];

 	 for(int i=0;i<stu.length;i++){   stu[i]=new Student();

            stu[i].setMajor("软件工程");

            stu[i].setName("小明");

            stu[i].setNumber(i);

            list.add(stu[i]);

}

            System.out.println(list);

            System.out.println(ListSize(list));

            System.out.println(dispaly(list,3));

            ArrayList  array=new ArrayList();

            Student stu1=new Student();

            stu1.setMajor("yuwen ");

            stu1.setName("小红");

            stu1.setNumber(999);

            array.add(stu1);

            Add(3,list,array);

            Change(2,list,array);

            System.out.println(list);

}

}



实验结果:

[Student [name=小明, number=0, major=软件工程],

Student [name=小明, number=1, major=软件工程],

Student [name=小明, number=2, major=软件工程],

 Student [name=小明, number=3, major=软件工程],

Student [name=小明, number=4, major=软件工程],

 Student [name=小明, number=5, major=软件工程],

 Student [name=小明, number=6, major=软件工程],

 Student [name=小明, number=7, major=软件工程],

Student [name=小明, number=8, major=软件工程],

Student [name=小明, number=9, major=软件工程],

Student [name=小明, number=10, major=软件工程]]

11



Student [name=小明, number=3, major=软件工程]



[Student [name=小明, number=0, major=软件工程], //number=1的值被删除

[Student [name=小红, number=999, major=yuwen ]],//对number=2的数组节点的属性值更改

[Student [name=小红, number=999, major=yuwen ]],//在数组节点下表为3的节点前面插入一个数组节点

 Student [name=小明, number=3, major=软件工程],

Student [name=小明, number=4, major=软件工程],

Student [name=小明, number=5, major=软件工程],

Student [name=小明, number=6, major=软件工程],

 Student [name=小明, number=7, major=软件工程],

 Student [name=小明, number=8, major=软件工程],

Student [name=小明, number=9, major=软件工程],

Student [name=小明, number=10, major=软件工程]]



简单分析:

1. 无论是顺序表还是链表,要对表进行操作,首先进行的处理就是判空。这里有一个 IsEmpty()方法,用来返回当前表是否为空表。

2.  ListSize()方法用来返回当前数组中的元素个数

3. Del(ArrayList list,int i)方法用来删除数组中的某个元素,方法中有两个参数,一个是整型数组下标,另一个是ArrayList类型的对象,该对象指向要删除元素的数组。

4. dispaly(ArrayList list,int i)方法打印出具体数组下标对应的数组节点的信息。

5. Change(int i,ArrayList list,ArrayList array)方法实现数组下标为i的数组节点中的属性值,ArrayList 类型的list对象指向被操作的数组,ArrayList 类型的array对象中存储着需要更改的节点的属性值。调用ArrayList中的.set()方法实现更新节点信息。

6. Add(int i,ArrayList list,ArrayList array)方法类似Change(),只不过是调用ArrayList中的.add()方法实现更新节点信息。其实该程序中完全没有必要写一个Add()方法,只要在MainText()中直接调用ArrayList封装的add()方法即可。