线性表是最简单,最基本,也是最常见的一种线性结构。它有两种存储方式:顺序存储和链式存储。它的基本操作主要是插入、删除和检索等。
线性表的用途广泛,应用于信息检索、存储管理、模拟技术和通信领域。软件工程的初学者可能会忽视数据结构这门课程,而把更多的精力集中在高级语言的课程上,其实这是一个很严重的误解。
本篇是我个人对于线性表的初步理解,望各位大佬发表高见,多多指教。这里的编程语言我选择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()方法即可。