鍊錶的各種操作

2021-09-29 04:44:43 字數 2917 閱讀 5595

#include

#include

typedef

struct node node;

typedef

struct

lists;

void

add(lists *list,

int num)

;//建立新鍊錶

void

print

(lists* list)

;//輸出鍊錶

void

frees

(lists* list);//清除鍊錶

void

insert

(lists* list)

;//插入乙個元素

void

deletes

(lists* list)

;//刪除乙個元素

intmain()

dowhile

(num !=-1

);print

(&list)

;int a,b=0;

printf

("0為結束程式\n1為建立新鍊錶\n2為顯示鍊錶\n3為插入資料\n4為刪除資料\n");

while(1

)while

(num !=-1

);print

(&list)

;break

;case2:

print

(&list)

;break

;case3:

insert

(&list)

;break

;case4:

deletes

(&list)

;break

;default

:printf

("錯誤,請重新輸入:");

break;}

if(b)

break;}

frees

(&list)

;printf

("已退出");

return0;

}

typedef

struct node node;

我定義了乙個結構,名字叫lists,其中包括 head(頭指標)和tail(尾指標);

typedef

struct

lists;

下面我將給出各種函式定義。

傳入乙個鍊錶,(即傳入鍊錶的頭指標)和傳入節點將要儲存的資料值

接下來就是要建立乙個節點即node* p;然後molloc一塊空間,因為我用的是尾插法,所以我們讓節點即p的next指標指向null,然後傳入的資料值賦值給p的num,這樣,乙個節點就建立完畢。

接下來就是怎麼把節點插到鍊錶中 ,首先判斷是否是空鍊錶,若是,則把頭指標和尾指標都指向p,若不是,則讓尾指標的next指向p,即list->tail->next = p ;就完成了。

void

add(lists* list,

int num)

else

list->tail = p;

}

這個是最簡單的操作,只要宣告乙個指標p,然後利用p遍歷鍊錶,就完成了

void

print

(lists* list)

printf

("\n");

}

而其中的這段**for的格式,也是最經典的遍歷鍊錶的寫法

for

(p = list->head; p; p = p->next)

**有點長,主要是要判斷輸入的數是否合理,其實可以在定義乙個數,就專門用來存放鍊錶長度的,就不用像我一樣寫的那麼長了,當然,這個可以自由發揮,就不再多講,現在講講怎麼插入。

其實並不難,就是輸入位置之後讓鍊錶迴圈,到位置之後就停止,這時,我**裡的q指標就指向了這個位置,而為什麼不用p指標,是因為p要作為乙個節點插入到煉表裡的,已經用掉了,而q指標的作用就是找到這個位置的前乙個位置,然後把p插入q節點的後面就?,具體操作就是讓p->next指向q->next,然後讓q->next指向p,二者的順序不能反,具體原因只要自己反著想一遍就能懂。主幹寫完之後就是判斷輸入的位置是不是合理的,豐滿之後就是下面的**,不過下面的**沒有判斷位置是負數的時候應該怎麼辦,所以這些細枝末節就給你自己寫**的時候在想吧。

void

insert

(lists* list)

else

}}

刪除操作的話我是選擇讓使用者輸入刪除的位置,還有另一種刪除,就是刪除數字,不過也都是大同小異,具體的差別就是數字可能會有好多個,在這裡就不在多說。

具體操作就是讓p指向要刪除的位置,然後讓q指向p的前乙個位置,這樣的話只要讓q指向p的下乙個,然後在free(p)就好,還有各種特殊情況,比如要刪除的節點是第乙個,那麼就要先讓p指向head,然後讓head指向自己的下乙個,在free(p),就?,還有各種情況,具體自己分析。

void

deletes

(lists* list)

else

if(a<=0)

else

else

if(p)

else

}}

就直接利用兩個老朋友,p和q指標完成這個工作,一直讓q指向p的下乙個,在釋放掉p,在讓p=q就?,具體看**。

void

frees

(lists* list)

}

**寫的問題多多,重要的是思路,要寫**的話可以先複製我的**執行一下,看一下效果,然後照著去寫,一些沒考慮清楚的地方,請各位看官(大佬)見諒。

鍊錶的各種操作

鍊錶的各種操作 typedef struct lnode lnode linklist 建立乙個鏈式表 向表中加入資料 status listset linklist head p2 next null return ok 返回鏈式表的長度 int listlength linklist head ...

鍊錶的各種操作

鍊錶的基本操作都寫在下面了 具體內容寫在 注釋中了 include include include include using namespace std struct listnode 增,傳進來要增加尾的鍊錶的表頭 可利用這個函式來建立鍊錶 void create listnode head,i...

鍊錶的各種基本操作

class linklist class node public node 在煉表頭新增節點 param value public void addfirst int value 在鏈尾新增節點 param value public void addlast int value 指定位置新增節點 p...