C語言 單鏈表

2021-08-07 23:54:55 字數 2602 閱讀 1120

鍊錶是一種常見的資料結構,它是動態地進行儲存分配的一種結構。每乙個儲存單元稱為乙個節點,都由兩部分組成,乙個是儲存資料的資料域,另乙個是儲存下乙個節點位址的指標域。

鍊錶分為單向鍊錶、雙向鍊錶,迴圈鍊錶等;單鏈表還可以分為帶頭節點的和不帶頭節點的。一般的鍊錶都是不帶頭節點的實現。下面是用c語言對單鏈表的簡單介面實現:包括鍊錶節點的建立、頭插尾插、頭刪尾刪、查詢指定元素、刪除指定元素等幾個函式。首先宣告,為了使程式更通用,我們將型別int重新命名為datatype,以後更換資料型別修改程式時,將更為方便。

鍊錶的結構:

typedef int datatype;

typedef struct node

node, *pnode, *plist;

函式的宣告:

void initlinklist(plist* pplist);//初始化

pnode buynode(datatype d);//建立節點

void pushfront(plist* pplist, datatype d);//頭插節點

void popfront(plist* pplist);//頭刪節點

void pushback(plist *pplist, datatype d);//尾插節點

void popback(plist *pplist);//尾刪節點

void display(plist plist);//列印鍊錶

void destroylist(plist* pplist);//銷毀鍊錶

pnode find(plist plist, datatype d);//查詢指定元素

void insert(plist *pplist, pnode pos, datatype d);//指定位置後插入元素

void remove(plist *pplist, datatype d);//刪除指定元素

void removeall(plist *pplist, datatype d);//刪除指定的所有元素

以下是具體的實現**:

void initlinklist(plist* pplist)//初始化鍊錶

pnode buynode(datatype d)//建立節點

tmp->data = d;

tmp->next = null;

return tmp;

}void pushfront(plist* pplist, datatype d)//頭插

else }

void popfront(plist* pplist)//頭刪

}void pushback(plist *pplist, datatype d)//尾插

else

cur->next = tmp; }}

void popback(plist *pplist)//尾刪

while (cur->next)//cur為要刪除的節點,tmp為要刪除的節點的前乙個

tmp->next = null;

free(cur);

cur = null;

}void display(plist plist)//列印鍊錶

printf("over\n");

}void destroylist(plist* pplist)//銷毀鍊錶

*pplist = null;

}pnode find(plist plist, datatype d)//查詢某個指定元素

return null;//如果沒找到返回null

}void insert(plist *pplist, pnode pos, datatype d)//在指定位置後插入元素

tmp->next = pos->next;

pos->next = tmp;

}void remove(plist *pplist, datatype d)

//要刪除指定元素,我們可以先用前面已經實現的find函式,找到指定元素的位置,然後再刪除

pnode pos = find(*pplist, d);

if (pos != null)

else//非尾

}}void remove_2(plist *pplist, datatype d)

//除過上面的方法,我們還可以遍歷鍊錶一遍,找到指定元素,進行刪除

while (cur)

pnode del = cur->next;刪除的節點非尾

cur->data = del->data;

cur->next = del->next;

free(del);

del = null;

} cur = cur->next; }}

void removeall(plist *pplist, datatype d)//刪除指定的所有元素

remove(pplist, d);//非尾

} if (cur->data != d)//等於d則刪除,不等於d則繼續遍歷鍊錶}}

C語言單鏈表

include include include define error 0 typedef struct lnode lnode,linklist linklist initlist linklist l node next null l node return l int listlength ...

c語言 單鏈表

單鏈表,顧名思義是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。我們在這裡使用c語言實現 h 檔案 pragma on...

C語言單鏈表

學過線性表中的順序表的都知道,順序表裡的資料在物理記憶體上是相鄰的,所以當我們在順序表中想要訪問下乙個元素時可以直接去訪問,就像陣列一樣。但是單鏈表卻不同,單鏈表的資料儲存的位置是動態分配的,也就是說單鏈表的儲存在物理記憶體上不是相鄰的,所以我們就只能通過指標這種方式來把單鏈表串起來,通過指標來訪問...