標籤:
電腦科學 資訊表示 資訊處理
資料結構中常用的概念和術語
資料
資料是資訊的載體,是能夠被電腦識別,儲存,計算(處理)的符號集合是電腦處理的對象的總稱
資料元素
資料元素也稱為結點,是組成資料的基本單位
資料項目
資料是資料的最小單位
資料對象
具有相同特徵的資料元素的集合,是資料的子集。
資料結構
電腦儲存,組織資料的方式。主要包括
邏輯結構
從邏輯關係傘描述資料,與資料存放區無關,且獨立語言。
(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(); //從線性表中移除所有元素
}
實作類別
package com.ls;public class LIst implements LinearList { private Object[] sList; // 實際儲存線性表元素的容器 private int size; // 實際儲存元素的數量 public LIst(int lenght) { if (lenght < 0) { sList = new Object[10]; } else { sList = new Object[lenght]; } } public LIst() { this(10); } /** * @see com.ls.LinearList#isEmpty() */ public boolean isEmpty() { return size==0; } public int size() { return size; } /** * 檢查索引值的有效性(用於向指定位置插入元素) */ public void checkIndexForAdd(int index){ if (index<0||index>size ) { throw new IndexOutOfBoundsException(" Index "+index+" Size "+size); } } public void checkIndex(int index){ if (index>=size ) { throw new IndexOutOfBoundsException(" Index "+index+" Size "+size); } } /** * @see com.ls.LinearList#get(int) */ public Object get(int index) { checkIndex(index); return sList[index]; } /** * 用指定元素替換線性表中指定的元素 */ public Object set(int index, Object element) { checkIndex(index); Object old=sList[index]; sList[index]=element; return old; } /** * 線上性表指定位置插入指定元素 */ public boolean add(int index, Object element) { //檢查索引有效性 checkIndexForAdd(index); //判斷容器是否還有容量 if (size==sList.length) { //沒有容量 Object[] temp=sList;// 將線性表儲存到一個臨時數組中 this.sList=new Object[temp.length*2]; //重新建立一個大數組 for (int i=0;i<=temp.length;i++) { //將臨時數組中的值取出放到大數組中 this.sList[i]=temp[i]; } } //元素後移 for(int i=size-1;i>=index;i--){ sList[i+1]=this.sList[i]; } sList[index]=element; size++; return true; } /** * @see com.ls.LinearList#add(java.lang.Object) */ public boolean add(Object element) { return add(size,element); } /** * @see com.ls.LinearList#remove(int) */ public Object remove(int index) { //檢查索引有效性 checkIndex(index); Object old=sList[index]; //元素前移 for(int i=index;i<size-1;i++){ sList[i]=this.sList[i+1]; } sList[size--]=null;//清空最後一個位置 return old;//返回刪除的元素 } /** * 從線性表中移除所有元素 */ public void clear() { if (size != 0) { for (int i = 0; i < size; i++) { this.sList[i]=null; size=0; } } }}
資料結構與演算法