資料結構入門學習系列 5(鍊錶的基本操作演算法)

2021-08-09 17:14:16 字數 1450 閱讀 4476

鍊錶的基本操作演算法,直接參照部分**:

鍊錶的建立,分為兩種,一種是隊尾插入,一種是隊頭插入:

typedef struct lnode  lnode;

//建立鍊錶(頭插入法)

lnode *create_linklist_head()

//鉤鏈,新建的節點是頭結點

return head;

}//建立鍊錶(尾插入法)

lnode *create_linklist_tail()

return head;

}

對於單鏈表,如果沒有明確指出直接後繼,那麼鉤鏈的次序必須是:先右後左。

對於單鏈表的查詢同樣有兩種方式:按照位置查詢和按照值來查詢。

首先來看按照位置查詢:

//按照序號查詢

elemtype get_elem(lnode *l,int i)

return p->data;

}

煉表不像之前的順序表,直接按照位置i就能找到相應的元素,而是需要從鍊錶的頭出發,依次查詢,直到找到對應的元素為止。就查詢來說,單鏈表的複雜度比順序儲存表時間度要複雜。

按照值來查詢:

//按照值查詢

lnode *get_position(lnode *l, elemtype key)

return null;

}

按照值來查詢,也是同樣需要從鍊錶的頭結點出發,依次比較:

//按照值查詢

lnode *get_position(lnode *l, elemtype key)

return null;

}

單鏈表的插入需要知道插入位置和插入元素,之前介紹過鍊錶的一些鉤鏈操作。其實插入就是先查詢,再鉤鏈的過程。具體可以參照如下code:

//鍊錶插入元素e到i位置

void insert_elemtype(lnode *l, int i, elemtype e)

lnode q = (lnode *)malloc(sizeof(lnode));

q->data = e;

q->next = p->next;

p->next = q;

}

同樣,刪除操作就是先查詢再斷鏈,然後釋放的過程。切記刪除元素一定要釋放記憶體:

//按位置序號刪除元素

void delete_elemtype(lnode *l,int i)

p->next = q->next;

free(q);

}//按照值刪除元素

void delete_elem(lnode *l, elemtype e)

p->next = q->next;

free(q);

}

資料結構系列之鍊錶

鍊錶是一種線性的資料結構型別,由一系列的節點組成。每個節點由儲存資料的資料域跟指向下乙個節點的指標域構成。鍊錶又有分單向鍊錶,雙向鍊錶,迴圈鍊錶等。單向鍊錶 單向鍊錶的結構示意圖就跟上圖結構一樣,只能單向遍歷,最開始的稱之為頭節點,最後乙個稱之為尾節點。遍歷或者查詢順序只能是從頭節點向尾節點方向依次...

資料結構 5 鍊錶與遞迴

鍊錶元素刪除問題的解答問題描述 在鍊錶 1,2,6,3,4,5,6 中刪除值為 6 的元素 遞迴 計算機中的很重要的元件邏輯機制 鍊錶具有遞迴性質 public listnode removeelementnew listnode head,int val 處理子鍊錶,分解問題 two head.n...

資料結構學習 鍊錶結構

儲存結構定義 struct node typedef struct node ptrtonode typedef ptrtonode list typedef ptrtonode position struct node 書寫 package thedatastructureaboutlinked ...