線性表:0個或多個資料元素的有限序列,記
長度為n,為0記為空表
線性表應該具有的操作:
adt listdata
,每個元素型別為datatype,除第乙個元素外,每乙個元素有且只有乙個直接前驅元素,除最後乙個元素外有且只有乙個直接後繼元素。
operation
initlist(*l); 初始化操作,建立乙個空的線性表l
listempty(l); 若線性表為空,返回true,否則返回false
clearlist(*l); 將線性表清空
getelem(l,i,*e); 將線性表l中的第i個位置元素返回給e
listdelete(*l,i,*e); 刪除線性表中第i個位置元素,並用e返回其值
listlength(l); 返回線性表l的元素個數
endadt
用一段位址連續的儲存單元依次儲存線性表的資料元素
在c/c++中表示為陣列
*注意區分陣列長度與線性表長度,前者指開闢的儲存空間的大小,基本不變;後者指表中元素資料的個數,隨著插入和刪除是不斷變化的。
主要優點:可快速訪問表中任意位置的元素
主要缺點:插入和刪除需要移動大量的元素
節點 = 資料域+指標域
若節點只包含乙個指標域,即只知後者,則叫做單鏈表
頭結點:在第乙個儲存資料的節點之前設定乙個頭結點,用於儲存長度等附加資訊,但是並不是必須的;
頭指標:指向鍊錶中第乙個節點的儲存位置,若有頭結點,則指向頭結點,若無頭結點,則指向第乙個資料節點,該指標是必須的;
最後乙個節點的指標域指向空。
*分辨頭節點、頭指標、第乙個資料節點、最後乙個資料節點(筆者自己稱為尾節點)以及尾指標等概念;
節點構造:
typedef struct node
node;
typedef struct node *linklist;
元素讀取(讀取第i個元素資料):
status getelem(linklist l,int i,elemtype *e)
if(!p||j>i)
return error; //返回錯誤,即第i個資料不存在
*e = p->data; //給e賦值
return ok;
}
單鏈表插入(插入到第i個資料之前)
status listinsert(linklist *l,int i,elemtype e)
//上述while結束,此時p指向第i-1個節點
if(!p||j>i) //沒有第i個節點
return error;
s = (linklist)malloc(sizeof(node)); //動態生成新節點
s->data = e; //插入節點資料部分賦值
s-next = p->next; //插入節點指標部分指向第i個節點
p->next = s; //第i-1節點指標部分指向插入節點s
return ok;
}
單鏈表刪除(刪除第i個資料)
status listinsert(linklist *l,int i,elemtype *e)
//上述while結束,此時p指向第i-1個節點
if(!p||j>i) //沒有第i個節點
return error;
q = p->next; //q記錄第i個節點
p->next = q->next; //將p節點(第i-1)的指標部分指向第i+1個節點
*e = q->data; //將第i個節點的資料給e
free(q); //釋放q節點占用的記憶體
return ok;
}
整表建立(頭插入)
void creatlisthead(linklist *l,int n)
}
整表建立(尾插入)
void creatlisthead(linklist *l,int n)
r->next = null; //鍊錶結束,尾部指向空
}
整表刪除
status clearlist(linklist *l)
(*l) -> next = null; //頭節點指標指向空
return ok;
}
單鏈表與順序儲存結構比較
主要優勢:插入與刪除更方便;不需要固定分配空間,元素個數也不受限制。
主要缺點:查詢的複雜度增加到了o(n)。
資料結構複習第二天(線性表)
線性表 list 具有相同資料型別零個或多個資料元素的有限序列。除第乙個元素外,每個元素有且僅有乙個直接前驅。除最後乙個元素外,每個元素有且僅有乙個直接後繼。線性表是一種邏輯結構,表示元素之間一對一的相鄰關係。順序表和煉表是指儲存結構,兩者屬於不同層面的概念,因此不要將其混淆。initlist l ...
資料結構第二天
學習資料結構第二天,有點學習心得,所以記錄一下。目前才接觸線性結構的順序表和單鏈表的 說說它們的異同吧。毫無疑問,順序表和單鏈表的共同點就是線性,即元素呈線性排列,單一前繼和單一後繼。並且表示形式都使用打頭的元素位址,有點順藤摸瓜的感覺。不同點就是順序表的物理結構也是順序的,實際上就是位址 而已,好...
考研第二天 線性代數
一 線性代數 one 行列式按行 列 展開 術語 余子式 代數余子式 引理 如果乙個行列式的第i行只有第j列元素aij不為0,其他元素都為 那麼該行列式等於aij與第 i,j 元的代數余子式之積。定理 行列式等於任意一行或一列每個元素與其對應代數余子式乘積之和。該定理叫做行列式按行 列 展開法則。定...