資料結構1--線性表(java程式碼實現線性表的順序儲存)
阿新 • • 發佈:2018-11-14
1.資料結構的概念
資料:資訊載體,計算機處理的物件的總稱
資料元素:也稱結點,組成資料的基本單位
資料項:資料項是資料的最小單位
2.線性結構:
有且僅有一個開始節點和一個終端節點,所有節點最多隻有一個直接前驅和一個直接後繼
3.複雜度
複雜度是衡量一個演算法好壞的重要手段,分為時間複雜度和空間複雜度,時間複雜度是以一個演算法執行時間長短來衡量演算法優劣的,如果問題的規模為n,則時間複雜度是n的一個函式:記作T(n)=O(f(n));
空間複雜度,他以一個演算法執行過程中所要佔用的儲存空間的多少來衡量一個演算法的優劣,他是問題規模n的一個函式,記作S(n)=O(f(n))
要找到第i個位置就要歷遍前i個元素,插入就要把剩下的元素全部後移,所以歷便了所有的元素,時間複雜度為O(n),同理刪 除第i個元素的道理也是一樣的,時間複雜度為O(n)線性表的儲存結構,但是要訪問的話就是O(1).
4.線性表
線性表是由n(n>=0)個數據元素組成的有限的序列
1.有且僅有一個開始節點
2.有且僅有一個終結節點
3.內部節點都有且僅有一個直接前驅和一個直接後繼
5.java程式碼實現線性表的順序儲存
線性儲存幾乎不浪費地址空間
建立一個LinearList 介面,包含了線性表的基本功能
package com.wx.datastructure.base;
public interface LinearList {
//介面中的變數都是static final的
public int size();//返回線性表長度的大小
public boolean isEmpty();//判斷線性表是否為空
public void add(int index,Object element);//指定位置插入元素
public void add(Object element);//線上性表的末尾新增元素
public void remove(Object elementm);//移除指定位置的元素
public void clear();//清空連結串列
public Object get(int index); //根據連結串列下標返回元素
}
實現這個介面:
package com.wx.datastructure.baseimp;
import com.wx.datastructure.base.LinearList;
public class WxArrList implements LinearList {
//順序儲存的連結串列底層用陣列來實現
private Object[] objectlist;
//預設初始的連結串列的長度10,這個10外部看不到
private int size;
//連結串列的當前位置
private int current=0;
public WxArrList()
{
//如果初始化不指定list的長度,list的長度則為10
this(10);
}
public WxArrList(int size)
{
//初始化指定list的長度
if(size>0)
{
this.size=size;
objectlist=new Object[size];
}
if (size==0)
{
objectlist=new Object[10];
}
//否則丟擲異常,初始化引數不合法
}
/*
返回連結串列長度的大小
*/
@Override
public int size() {
//這個長度是此時連結串列中實際裝有元素的多少
return this.current;
}
/*
判斷連結串列是否為空
*/
@Override
public boolean isEmpty() {
if (this.current==0)
{
return true;
}
return false;
}
/*
向指定位置新增元素
*/
@Override
public void add(int index, Object element) {
if(index>size&&index<0)
{
throw new IndexOutOfBoundsException("index"+index);
}
//先對連結串列進行擴容,再往後移動,再實現插入的操作
//先判斷陣列是否已經滿了,滿了就擴容
if(current+1>this.size-1)
{
size++;
Object[] temp=new Object[size];
for(int i=0;i<=objectlist.length-1;i++)
{
temp[i]=objectlist[i];
}
objectlist=null;
objectlist=temp;
}
//把index後的元素往後挪動一位
for (int i=current-1;i>=index;i--)
{
objectlist[i+1]=objectlist[i];
}
//index位置插入元素
objectlist[index]=element;
current++;
}
/*
在連結串列的尾部新增元素
*/
@Override
public void add(Object element) {
//初始的陣列的大小為10或為自己指定的數,如何實現新增元素的功能
//先判斷當前陣列是否滿了,滿了就擴容,每次的增量為1
if (current>this.size-1)
{
this.size=size+1;
Object[] temp=new Object[this.size];
for (int i=0;i<current;i++)
{
temp[i]=objectlist[i];
}
objectlist=null;
objectlist=temp;
}
objectlist[current]=element;
current++;
}
@Override
public void remove(Object elementm) {
}
@Override
public void clear() {
}
/*
根據連結串列下標來訪問元素
*/
@Override
public Object get(int index) {
if(index>=0&&index<=this.size)
{
return objectlist[index];
}
return null;
}
}
測試類:
package com.wx.datastructure.test;
import com.wx.datastructure.baseimp.WxArrList;
public class TestWxList {
public static void main(String[] agrs)
{
WxArrList wxArrList=new WxArrList(2);
wxArrList.add(9);
wxArrList.add(0,0);
wxArrList.add(1,1);
wxArrList.add(1,2);
System.out.print("連結串列的長度:"+wxArrList.size());
System.out.print(" ");
System.out.print(wxArrList.get(0));
System.out.print(wxArrList.get(1));
System.out.print(wxArrList.get(2));
System.out.print(wxArrList.get(3));
}
}
執行結果:
以上程式碼地址:https://github.com/WangAlainDelon/DataStructure1.git