計算機科學 信息表示 信息處理java
數據結構中經常使用的概念和術語node
數據 算法
數據是信息的載體,是可以被計算機識別,存儲,計算(處理)的符號集合是計算機處理的對象的總稱數組
數據元素數據結構
數據元素也稱爲結點,是組成數據的基本單位ide
數據項函數
數據是數據的最小單位this
數據對象spa
具備相同特徵的數據元素的集合,是數據的子集。指針
數據結構
計算機存儲,組織數據的方式。主要包括
邏輯結構
從邏輯關係傘描述數據,與數據存儲無關,且獨立語言。
(1)線性結構 (指有且有一個開始節點和一個終端節點,內部節點有且僅有一個前驅點和一個後繼節點)
(2)非線性結構
存儲結構
數據運算
算法
算法是爲求解一個問題須要遵循的,被清晰指定的簡單指令集合。
算法的特色
待處理問題的相關信息做爲輸入數據
對與一個既定的合法輸入,屢次執行同一個算法老是返回同一個結果
算法中的指令都是可行的,並在有效的時間內完成。
算法中指令數量是有限的,即在有限時間內,算法能夠正確結束。
算法執行完畢,可以正確輸出的數據集合
算法分析
目的:選擇一個合適的算法
一個算法的好壞是從複雜度來衡量的
複雜度分爲時間複雜度和空間複雜度
時間複雜度 若是問題規模是n則時間複雜的度是關於n的函數記做T(n)=O(f(n)
) 算法的執行時間=算法循環次數X操做執行的時間。
線性表功能呢接口定義
public interface LinearList {
boolean isEmpty();//判斷線性表是否爲空
int size();//返回線性表元素數量
Object get(int index);//返回索引爲index的元素
Object set(int index,Object element);//用指定元素替換線性表中指定的元素
boolean add(int index,Object element);//在線性表指定位置插入指定元素
boolean add(Object element);//向線性標的尾部添加元素
Object remove (int index);//移除線性表中指定的元素
void clear(); //從線性表中移除全部元素
}
實現類
1 package com.ls; 2 3 public class LIst implements LinearList { 4 private Object[] sList; // 實際存儲線性表元素的容器 5 private int size; // 實際存儲元素的數量 6 7 8 9 public LIst(int lenght) { 10 if (lenght < 0) { 11 sList = new Object[10]; 12 } else { 13 sList = new Object[lenght]; 14 } 15 } 16 17 public LIst() { 18 this(10); 19 } 20 21 /** 22 * @see com.ls.LinearList#isEmpty() 23 */ 24 public boolean isEmpty() { 25 26 return size==0; 27 } 28 29 public int size() { 30 31 return size; 32 } 33 34 /** 35 * 檢查索引值的有效性(用於向指定位置插入元素) 36 */ 37 public void checkIndexForAdd(int index){ 38 if (index<0||index>size ) { 39 throw new IndexOutOfBoundsException(" Index "+index+" Size "+size); 40 } 41 } 42 public void checkIndex(int index){ 43 if (index>=size ) { 44 throw new IndexOutOfBoundsException(" Index "+index+" Size "+size); 45 } 46 } 47 48 49 /** 50 * @see com.ls.LinearList#get(int) 51 */ 52 public Object get(int index) { 53 checkIndex(index); 54 return sList[index]; 55 } 56 57 /** 58 * 用指定元素替換線性表中指定的元素 59 */ 60 public Object set(int index, Object element) { 61 checkIndex(index); 62 Object old=sList[index]; 63 sList[index]=element; 64 return old; 65 } 66 67 /** 68 * 在線性表指定位置插入指定元素 69 */ 70 public boolean add(int index, Object element) { 71 //檢查索引有效性 72 checkIndexForAdd(index); 73 //判斷容器是否還有容量 74 if (size==sList.length) { //沒有容量 75 Object[] temp=sList;// 將線性表保存到一個臨時數組中 76 this.sList=new Object[temp.length*2]; //從新建立一個大數組 77 78 for (int i=0;i<=temp.length;i++) { //將臨時數組中的值取出放到大數組中 79 this.sList[i]=temp[i]; 80 } 81 } 82 //元素後移 83 for(int i=size-1;i>=index;i--){ 84 sList[i+1]=this.sList[i]; 85 } 86 sList[index]=element; 87 size++; 88 return true; 89 } 90 91 /** 92 * @see com.ls.LinearList#add(java.lang.Object) 93 */ 94 public boolean add(Object element) { 95 96 return add(size,element); 97 } 98 99 /** 100 * @see com.ls.LinearList#remove(int) 101 */ 102 public Object remove(int index) { 103 //檢查索引有效性 104 checkIndex(index); 105 Object old=sList[index]; 106 //元素前移 107 for(int i=index;i<size-1;i++){ 108 sList[i]=this.sList[i+1]; 109 } 110 sList[size--]=null;//清空最後一個位置 111 return old;//返回刪除的元素 112 } 113 114 /** 115 * 從線性表中移除全部元素 116 */ 117 public void clear() { 118 if (size != 0) { 119 for (int i = 0; i < size; i++) { 120 this.sList[i]=null; 121 size=0; 122 } 123 } 124 } 125 126 }
單鏈表也叫線性鏈表 有存儲數據的的數據域nodeValue和指向下一個節點的指針域next