數據結構-線性表-順序表的代碼詳解
數據結構中的一大重點 線性表:
一。順序表
數據存儲是連續的,有多少數據開闢多少儲存空間,所以不存在資源浪費
查找速度快,但是在增刪數據的時候可能會移動大量數據,所以增刪操作速度慢
二。鏈表
數據存儲是離散的,所以數據的存儲不連續,無規則,可能存在空間大於數據數目,浪費資源
但是增加跟刪除元素的時候不影響其他元素,速度快
根據劃分條件不同:
鏈表結構可分為單向鏈表,雙向鏈表 循環鏈表 非循環鏈表
三。這篇文章詳解順序表!!!!!!代碼在最後附上!!!!
1.代碼部分 一包 一介面二類 在學習過程中可以對著左側行序號更改代碼
2.介面類List
3.順序表類SequenceList
3.測試類
4.運行結果
5.代碼部分附上:
List類:
package LinearList;
//定義一個線性表介面
public interface List {
//定義線性表的長度
public int Size();
//判斷線性表是否為空
public boolean IsEmpty();
//插入元素
public void Insert(int index,Object object) throws Exception;
//刪除元素
public void Delete(int index) throws Exception;
//查找元素
public Object FindData(int index) throws Exception;
}
SequenceList類
package LinearList;
public class SequenceList implements LinearList.List{
//設置順序表默認的最大長度
final int DefaultSize = 20;
//設置順序表的最大長度
int Maxsize;
//設置順序表的當前長度
int size;
//存儲對象的數組(因為不知道存儲的是哪種類型的數據,所以選擇object)
Object OjbArr[];
//初始化順序表
public void Init(int size) {
//設置順序表長度
Maxsize = size;
//設置完之後將順序表當前的長度size設置為0,因為還未輸入數據
this.size = 0;
//根據長度實例化對象數組數目
OjbArr = new Object[size];
}
//構造函數,默認最大長度下的構造函數和用戶輸入最大長度下的構造函數
//構造函數中創建該表
public SequenceList() {
// TODO Auto-generated constructor stub
Init(DefaultSize);
}
public SequenceList(int size) {
Init(size);
}
@Override
//返回順序表的長度
public int Size() {
// TODO Auto-generated method stub
return size;
}
@Override
//返回對順序表的判斷是否為空
public boolean IsEmpty() {
// TODO Auto-generated method stub
//通過判斷當前順序表的size是否為0 以此判斷該順序表是否為空
return size == 0;
}
@Override
public void Insert(int index, Object object) throws Exception {
// TODO Auto-generated method stub
//判斷該表是否已經存滿
if(size>=Maxsize) {
throw new Exception("該表已經存滿");
}
//判斷插入數據的位置是否合法
if(index<size||index>Maxsize) {
throw new Exception("插入位置不合法");
}
//若上述進程沒有被打斷,則證明該插入操作是沒問題的,繼續正常進行
//當前長度++
size++;
//移動元素讓出位置使該元素插入
//移動的原理是將所插位置元素以後的元素全部後移,讓出這個位置給新來元素
for(int j=size;j>=index;j--) {
OjbArr[size+1] = OjbArr[size];
}
//元素加入index位置
OjbArr[index] = object;
}
@Override
public void Delete(int index) throws Exception {
// TODO Auto-generated method stub
//判斷順序表是否為空,為空沒法進行刪除操作
if(IsEmpty()) {
throw new Exception("該順序表為空");
}
//判斷是否有該位置
if(index<0||index>size) {
throw new Exception("沒有該位置");
}
//元素前移頂掉index處的元素
for(int j=index;j<=size-1;j++){
OjbArr[j]=OjbArr[j+1];
}
//順序表長度--
size--;
}
@Override
public Object FindData(int index) throws Exception {
// TODO Auto-generated method stub
//判斷順序表是否為空,為空沒法進行查找操作
if(IsEmpty()) {
throw new Exception("該順序表為空");
}
//判斷是否有該位置
if(index<0||index>size) {
throw new Exception("沒有該位置");
}
return OjbArr[index];
}
}
測試類Test
package LinearList;
public class Test {
public static void main(String args[]) {
//創建一個順序表對象
SequenceList list = new SequenceList(20);
//為順序表插入數據
try {
//增加
list.Insert(0, 11);
list.Insert(1, 22);
list.Insert(2, 33);
list.Insert(3, 44);
//刪除
list.Delete(1);
//查找
for(int i=0;i<list.Size();i++) {
System.out.println("第"+i+"個元素為"+list.FindData(i));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
TAG:程序員小新人學習 |