C語言實現無頭節點的單鏈表

2021-08-02 13:19:27 字數 2752 閱讀 6910

測試**

singlelinkedlist.h標頭檔案

#ifndef __singlelinkedlist_h__

#include

#include

#include

typedef

int datatype;

typedef

struct listnode

listnode;

listnode *initlist(datatype num);//初始化並賦值

void pushback(listnode **pplist, datatype num);//尾插

void printlist(listnode *plist);//輸出

void destorylist(listnode** pplist);//釋放鍊錶(包括環)

void popback(listnode **pplist);//尾刪

void pushfront(listnode **pplist, datatype num);//頭插

void popfront(listnode **pplist);//頭刪

listnode* find(listnode *plist, datatype num);//查詢

void insert(listnode** pplist, listnode* pos, datatype x);//插入

void erase(listnode** pplist, listnode* pos);//刪除

#endif//__singlelinkedlist_h__

singlelinkedlist.c實現部分

#include

"singlelinkedlist.h"

listnode *initlist(datatype num)//定義乙個新的結點

void pushback(listnode **pplist, datatype num)//尾插

else

if ((*pplist)->next ==

null)//只有乙個結點

else

//正常情況(多個結點)

tail->next = initlist(num);//找到以後直接新增乙個結點

}}void printlist(listnode *plist)//列印鍊錶

printf("null");

printf("\n");

}void destorylist(listnode** pplist)//釋放鍊錶(包括環)

*pplist =

null;

}void popback(listnode **pplist)//尾刪

else

if ((*pplist)->next ==

null)//只有乙個結點,直接釋放

else

free(tail);//釋放最後乙個結點就相當於刪除了尾結點

tail =

null;

pos->next =

null;

}}void pushfront(listnode **pplist, datatype num)//頭插

else

}void popfront(listnode **pplist)//頭刪

else

if ((*pplist)->next ==

null)//只有乙個結點

else

}listnode* find(listnode *plist, datatype num)//查詢

plist = plist->next;

}return

null;

}void insert(listnode** pplist, listnode* pos, datatype num)//插入

else

tmp = initlist(num);

tail->next = tmp;

tmp->next = pos;

}}void erase(listnode** pplist, listnode* pos)//刪除

else

tmp->next = pos->next;

free(pos);

pos =

null;}}

test.c測試部分

#include

"singlelinkedlist.h"

void test()

void test1()

void test2()

else

*/insert(&

list, ret, 3);

printlist(list);

erase(&

list, ret);

printlist(list);

}int main()

test()測試結果

test1()測試結果

test2()測試結果

C語言無頭節點單鏈表的實現

鍊錶相對於順序表來說,插入和刪除更加方便,然而想要查詢乙個元素時卻沒有順序表方便。我們需要實現以下介面 ifndef linklist h define linklist h include include include include typedef int datatype typedef s...

單鏈表 無頭節點

就這書上 敲了一邊,加深印象,沒有頭結點的時候插入第乙個就有所不同了,而刪除時要找到前乙個,注意current link null 就這樣。include include include using namespace std struct linknode class list bool list...

單鏈表操作 無頭節點

ifndef singlelist h define singlelist h 這是沒有頭結點的版本檔案 有頭結點的版本更簡單些,操作統一 include include include include typedef int elemtype typedef struct nodenode,lin...