C語言 單向鍊錶 自定義基本操作

2021-09-01 05:27:51 字數 2008 閱讀 4828

在資料的刪除和增加方面,單向鍊錶的操作更加方便,只需要找到相應的節點,然後刪除該節點或者在這個節點之後增加乙個節點,不需要對其他節點進行移動。而順序表在資料的隨機讀取方面更加便利,不需要從頭結點乙個節點乙個節點的後移。

在單向鍊錶上,對於指標的移動,只能從前到後。所以,如果要獲的指標前的乙個資料,只能讓指標從鍊錶的頭部開始往後移,如此做會占用大量的時間,擴大運算的時間複雜度。然而雙向鍊錶通過多定義乙個指標指向前乙個節點,使指標可以往前移動,從而減少不必要的操作。

兩種資料結構類似,只是單向迴圈鍊錶的最後乙個節點的指標域指向的是第乙個節點,不是null。而且通過定義兩個指標,乙個指向第乙個節點,另乙個指向最後乙個節點作為標記。防止隨後輸入的資料把之前輸入的資料覆蓋。

我把單向鍊錶的基本操作分為:建立頭結點、鍊錶插入節點到正指向指標cur後、鍊錶的指標cur定長n移動、用指標cur搜尋某值為m的節點、刪除節點cur、清空鍊錶、清空表頭、輸出指標cur的值、改變指標變數cur的資料。而其他操作大多可以有這些基本操作相互結合完成。

結構體定義

typedef struct elemelem,*elemp;

typedef struct sqlist,*sqlistp;

建立頭結點函式
status initlist(&l)
鍊錶插入節點到正指向指標cur後函式
status addlist(&l,m) 

elemp p1=(elemp)malloc(sizeof(elem));//申請空間

if(!p1) return error;

p1->next=l->cur->next; l->cur->next=p1; p1->data=m;//節點賦值

l->cur=l->cur->next;//移動指標到新增節點

l->elem_length++;//節點數加一

return ok;

}

鍊錶的指標cur定長n移動函式(起始位置為0)
status movelist(&l,n)

if(n>l->elem_length)

else

}

用指標cur搜尋某值為m的節點函式
status searchlist(&l,m)

l->cur=l->head;

for(;l->cur->next!=null&&l->cur->data!=m;) l->cur=l->cur->next;

if(l->cur->data!=m)

else

}

刪除節點cur函式
stastus dellist(&l)

if(l->cur==l->tail)

p2=l->cur;

l->cur=l->cur->next;

free(p2);//釋放節點

l->elem_length--;//節點數減一

return ok;

}

清空鍊錶函式
status delalllist(&l)

else

l->tail=l->head;//表頭賦值

l->head->next=null;

l->elem_length=0;

return ok;

}}

清空表頭函式
status del(&l)

if(l->head->next!=null)

else

}

輸出指標cur的值函式
status printflist(&l)

else if(l->elem_length==0)

else

}

改變指標變數cur的資料函式
status printflist(&l,m)

else if(l->elem_length==0)

else

}

C語言 單向鍊錶的基本操作

define crt secure no warnings include include include typedef struct node node 建立頭節點和鍊錶 鍊錶的頭結點位址由函式值返回 node slistcreat return head 鍊錶的遍歷 int slistprin...

c語言單向鍊錶基本操作學習

鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以head來表示,存放的是乙個位址。鍊錶中的節點分為兩類,頭結點和一般節...

C 自定義鍊錶

c 中的鍊錶結構在程式中十分常見,用處很廣。鍊錶結構中,每個節點由值部分和指標部分組成,值部分即儲存的資料,指標指向下乙個節點,從而使得每個節點能夠連線起來,值和指標就像骨骼和關節一樣。自定義鍊錶,首先定義出節點的結構,用類表示為 public class node定義完節點,下面開始構造list鍊...