20150405 鍊錶

2021-06-29 14:36:11 字數 2384 閱讀 1343

鍊錶(linked list):是一種常見的資料結構,是一種線性表,但並不會按線性的儲存資料,而是每個結點裡存著指向下乙個結點的指標。

-優點:由於不必按順序儲存,鍊錶在插入式的時間複雜度為o(1)。

-缺點:查詢或訪問特定結點需要遍歷,不支援隨機查詢和訪問,時間複雜度o(n)。

typedef

struct lnode

lnode, * linklist; //lnode 為鍊錶結點的型別,linklist為鍊錶的型別

//帶頭結點

void ini_linklist(linklist *l)

//在這裡,建立鍊錶,要對實參進行改變,所以對於型別linklist要傳位址過來。筆者剛學習的時候對這些不太了解,所以又有如此下的一種寫法,可以暫時規避這個問題。

linklist ini_linklist(void)

//不帶頭結點

linklist ini_linklist(void)

顧名思義,將結點查到鍊錶的最前頭,使其成為第乙個結點(若是帶頭結點的鍊錶,則插入在頭結點後)

說明:無論插入還是刪除,我們都需要知曉我們操作結點的前驅結點的位置。

關鍵**

//**帶頭結點的頭插法**

//說明:pnew為插入結點,pre為pnew的前驅,這裡應為頭結點l

pnew->next=l->next;

l->next=pnew;

//**不帶頭結點的頭插法**

//說明:筆者習慣用l表示不儲存資料的頭結點,對於儲存資料的頭結點使用head表示

pnew->next=phead;

下面附上兩個實現的頭插法版本

//首先是帶頭結點的

void head_insert(linklist *l)

}

//不帶頭結點版本

void show_link(linklist head)

while(ptr!=null)

printf("\n");

}

尾插法,插入在鏈表現有元素的最後乙個元素(tail)之後。

關鍵**

//在這裡有沒有頭結點操作沒有不同,除非使用尾插法初始化的是第乙個元素,這裡我們不討論這個問題,會在下面的具體例項裡處理

//說明:pnew為待插入結點,ptail為尾元素,也將成為pnew的前驅。

pnew->next=ptail->next;

ptail->next=pnew;

ptail=pnew;

下面附上兩個版本的尾插法

//帶頭節點版本

#include "myfunc.h"

void tail_insert(linklist *l)

//尾插

while(scanf("%d",&val)!=eof)

}

//不帶頭結點版本

void tail_insert(linklist *head)

while(ptail->next!=null)

//尾插

while(scanf("%d",&val)!=eof)

}

關鍵**
//說明:ptr為操作結點指標,pre為其前驅

pre->next=ptr->next;

free(ptr);//只能釋放由malloc,realloc等分配的空間,你如果不知道是否是這樣的分配,最好不寫。

還是慣例,附上兩個刪除版本

//帶頭結點

void delete_link(linklist *l,int val)

while(ptr!=null)

pre=ptr;

ptr=ptr->next;

}printf("no such datum\n");

}

//不帶頭結點版本

#include "myfunc.h"

void delete_link(linklist *head,int val)

if(ptr->data==val)

pre=ptr;

ptr=ptr->next;

while(ptr!=null)

pre=ptr;

ptr=ptr->next;

}printf("no such value\n");

}

鍊錶 環形鍊錶

環形鍊錶也叫迴圈鍊錶 可以是雙鏈表 也可以是單鏈表 操作原理和單鏈表差不多,只是最後乙個節點不在指向空 null 而是頭 head 這裡以單鏈表舉例 description 環形鍊錶 author lzq date 2018 11 3 20 46 version 1.0 public class a...

鍊錶 初識鍊錶

鍊錶 前言 小弟初學資料結構,有錯誤的地方望大家不吝賜教 認識鍊錶 列表相比陣列更具有優勢,鍊錶不同於資料和其他資料結構依靠位置來進行訪問或者其他操作,如陣列是依靠下表來運算元據。而鍊錶是通過關係來尋找或者運算元據。鍊錶的特性 插入 和 刪除 效率高,只需要變更指向的鏈結點即可。但是隨即訪問操作的效...

鍊錶(鍊錶建立)

先找到了一些與單鏈表相關的概念 2.指標域 ai元素儲存指向後繼元素儲存位置的資訊 3.結點 包含資料域和指標域 4.單鏈表 每個結點只包含乙個指標域的線性表 5.頭指標 要素 鍊錶中第乙個結點的儲存位置 線性表最後乙個結點指標為空 6.頭結點 非要素 單鏈表第乙個結點前附設乙個結點 其指標域指向第...