C語言單向鍊錶實現

2021-09-02 23:54:39 字數 3843 閱讀 2316

#include

#include

typedef struct node listnode;

typedef listnode linklist;

//帶頭節點的單鏈表

//初始化單鏈表只有頭節點

void

initlinklist

(linklist *linklist)

//建立乙個單鏈表

linklist *

createlinklist()

}/**

listnode *getnode(linklist *linklist, int position)

引數: linklist:指向乙個單鏈表的指標;position:指定的返回節點

返回值:

若存在指定節點則返回,否則返回null

功能: 返回指定的節點

*/listnode *

getnode

(linklist *linklist, int position )

return pnode;

//返回指定節點

}return

null;}

/**listnode *deletenode(linklist *linklist, int position)

引數: linklist:指向乙個單鏈表的指標;position:需要刪除的節點

返回值:

若存在指定節點則返回,否則返回null

功能: 刪除指定的節點

*/listnode *

deletenode

(linklist *linklist, int position)

if(position <=0)

int pos =0;

// this is a flag to find the specific position

listnode *pnode = linklist;

//the head of linklist

while

(pos < position)

// remove the specific node

listnode *prevnode =

getnode

(linklist, position -1)

; prevnode-

>next = pnode-

>next;

free

(pnode)

;return pnode;

}/**

void clearall(linklist *linklist)

引數: listnode:指向乙個單鏈表的指標

返回值:

無功能: 清空整個鍊錶

*/void

clearall

(listnode *linklist)

}/**

void finitlinklist(linklist *linklist)

引數: linklist:指向乙個單鏈表頭結點的指標

返回值:

無功能: 解初始化鍊錶

注意: 使用initlinklist建立的鍊錶要使用finitlinklist來解初始化

*/void

finitlinklist

(linklist *linklist)

listnode *

gettail

(linklist *linklist)

/**int insertnodeat (linklist *linklist, int data, int position)

引數: linklist: 指向乙個單向煉表頭結點的指標

data: 要插入的資料

position: 資料插入的目標位置

返回值:

插入成功返回1,插入失敗返回-1;

功能: 向指定位置插入資料

*/int insertnodeat

(linklist *linklist, int data, int position)

listnode *pnode =

getnode

(linklist, position -1)

;//to check whether position is overflow

if(pnode ==

null

&& position !=0)

return-1

; listnode *newnode =

(listnode *

)malloc

(sizeof

(listnode));

newnode-

>data = data;

newnode-

>next = pnode-

>next;

pnode-

>next = newnode;

return1;

}/**

int inserthead (linklist *linklist, int data)

引數: linklist: 指向乙個單向煉表頭結點的指標

data: 要插入的資料

返回值:

插入成功返回1,插入失敗返回-1;

功能: 插入新的頭節點

*/int inserthead

(linklist *linklist, int data)

int inserttail

(linklist *linklist, int data)

//輸出鍊錶

void

printlinklist

(linklist *linklist)

else}}

/**void printnode(listnode *pnode)

引數: pnode指向目標結點的指標

返回值:

無功能: 輸出指定結點的資料

*/void

printnode

(listnode *pnode)

int main

(void

)printlinklist

(linklist)

; listnode *pnode =

getnode

(linklist,1)

;printnode

(pnode)

;printf

("*****************************\n");

insertnodeat

(linklist,10,

3);printlinklist

(linklist)

;printf

("*****************************\n");

if(inserthead

(linklist,44)

==-1)

printf

("插入失敗!\n");

if(inserttail

(linklist,33)

==-1)

printlinklist

(linklist)

;printf

("******************************\n");

deletenode

(linklist,1)

;clearall

(linklist)

;printlinklist

(linklist)

;finitlinklist

(linklist)

;}

C語言單向鍊錶的實現

乙個簡單結點的結構體表示為 struct note int data 資料成員可以是多個不同型別的資料 struct note next 指標變數成員只能是 個 乙個簡單的單向鍊錶的圖示 1 鍊錶是結構 指標相結合的 種應用,它是由頭 中間 尾多個鏈環組成的單方向可伸縮的鍊錶,鍊錶上的鏈環我們稱之為...

C語言基礎 實現單向鍊錶

回歸c基礎 實現乙個單向鍊錶,並有逆序功能 大學資料結構經常是這麼入門的 定義單鏈表結構體 typedef struct nodenode 建立鍊錶 node createnode int value,node next 列印鍊錶 void printlist node list 反轉鍊錶 node...

C語言單向鍊錶的實現

偶然間想起了n年前的乙個c語言的面試題目,現在做了乙個總結,完美解答。乙個簡單結點的結構體表示為 struct note 乙個簡單的單向鍊錶的圖示 1 鍊錶是結構 指標相結合的 種應用,它是由頭 中間 尾多個鏈環組成的單方向可伸縮的鍊錶,鍊錶上的鏈環我們稱之為結點。2 每個結點的資料可用 個結構體表...