C語言 企業鍊錶 Linux核心鍊錶優化簡單實現

2021-10-07 09:48:54 字數 2693 閱讀 3625

#ifndef  linuxkernellist_h

#define linuxkernellist_h

#include#include#include//鍊錶指標節點

typedef struct linuxnode linuxnode;

//鍊錶真正節點

typedef struct linuxlist linuxlist;

//遍歷函式的指標

typedef void(*printnode)(linuxnode*);

//比較函式的指標

typedef int(*comparenode)(linuxnode*, linuxnode*);

//初始化鍊錶

linuxlist* init_linuxlist();

//插入鍊錶

void insert_linuxlist(linuxlist* list, int pos, linuxnode* data);

//刪除鍊錶

void remove_linuxlist(linuxlist* list, int pos);

//查詢鍊錶元素

int find_linuxlist(linuxlist* list, linuxnode* data ,comparenode compare);

//返回鍊錶大小

int size_linuxlist(linuxlist* list);

//列印鍊錶

void print_linuxlist(linuxlist* list, printnode print);

//釋放鍊錶記憶體

void freespace_linuxlist(linuxlist* list);

#endif // ! linuxkernellist_h

#include "linuxkernellist.h"

//初始化鍊錶

linuxlist* init_linuxlist()

//插入鍊錶

void insert_linuxlist(linuxlist* list, int pos, linuxnode* data)

if (data == null)

if (pos<0 || pos>list->size)

//查詢插入位置

linuxnode* pcurrent = &(list->head);

for (int i = 0; i < pos; i++)

//插入新節點

data->next = pcurrent->next;

pcurrent->next = data;

list->size++;

}//刪除鍊錶

void remove_linuxlist(linuxlist* list, int pos)

if (pos<0 || pos>list->size)

//查詢刪除位置

linuxnode* pcurrent = &(list->head);

for (int i = 0; i < pos; i++)

//刪除節點

pcurrent->next = pcurrent->next->next;

//因為我們並沒有在節點裡分配記憶體,資料資訊儲存在鍊錶的其他域內,所以我們在刪除時也不需要釋放記憶體

list->size--;

}//查詢鍊錶元素

int find_linuxlist(linuxlist* list, linuxnode* data, comparenode compare)

if (data == null)

//輔助指標

linuxnode* pcurrent = list->head.next;

int index = 0;

int flag = -1; //用於判斷是否查詢到了目標值

//如果查詢到了就將index 賦給flag

//如果沒查詢到,就將flag=-1返回

while (pcurrent != null)

pcurrent = pcurrent->next;

index++;

}return flag;

}//返回鍊錶大小

int size_linuxlist(linuxlist* list)

//列印鍊錶

void print_linuxlist(linuxlist* list, printnode print)

//輔助指標

linuxnode* pcurrent = list->head.next;

while (pcurrent != null)

}//釋放鍊錶記憶體

void freespace_linuxlist(linuxlist* list)

free(list);

}

typedef struct  person_2person_2;

//列印方式

void myprint2(linuxnode*data)

//比較方式

int mycompare(linuxnode* pcurrent,linuxnode*data)

return -1;

}void linuxlisttest()

int main()

linux核心鍊錶

鍊錶是一種常用的資料結構,它通過指標將一系列資料節點連線成一條資料鏈。相對於陣列,鍊錶具有更好的動態性,建立鍊錶時無需預先知道資料總量,可以隨機分配空間,可以高效地在鍊錶中的任意位置實時插入或刪除資料。鍊錶的開銷主要是訪問的順序性和組織鏈的空間損失。一 鍊錶結構 單鏈表結構如下 雙鏈表結構如圖 st...

linux核心鍊錶

include include struct list head struct mylist void list add struct list head new,struct list head prev,struct list head next void list add tail struc...

Linux核心鍊錶

核心鍊錶 核心鍊錶即,我麼在乙個鍊錶中插入或刪除乙個資料,都需要自己編寫 相當的麻煩,怎麼解決這個問題呢,為了更加方便的解決這個問題,linux中就產生了核心鍊錶,以後想要在鍊錶中插入資料或刪除資料時,只需要呼叫函式就可以了。鍊錶對比 鍊錶是一種資料結構,他通過指標將一系列的資料節點連線成一條資料鏈...