C 實現企業鍊錶(單向鍊錶的另外一種實現方式)

2022-06-02 18:03:12 字數 2467 閱讀 4127

linklist.h

#include #include 

//鍊錶小結點

typedef struct

linknode

linknode;

//鍊錶結點

typedef struct

linklist

linklist;

//遍歷結點的函式指標

typedef void(*printlinknode)(linknode*);

//比較函式指標

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

//初始化鍊錶

linklist*init_linklist();

//根據位置插入語乙個結點

void insert_linklist(linklist* list, int pos, linknode*data);

//根據位置刪除乙個結點

void removebypos_linklist(linklist* list, int

pos);

//查詢結點

int find_linklist(linklist* list, linknode*data, comparenode compare);

//返回鍊錶的大小

int size_linklist(linklist*list);

//列印鍊錶

void print_linklist(linklist*list, printlinknode print);

//釋放記憶體

void freemem_linklist(linklist* list);

linklist.cpp

#include "

linklist.h"//

初始化鍊錶

linklist*init_linklist()

//根據位置插入語乙個結點

void insert_linklist(linklist* list, int pos, linknode*data)

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

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

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

data->next = pcurrent->next;

pcurrent->next =data;

list->size++;}//

根據位置刪除乙個結點

void removebypos_linklist(linklist* list, int

pos)

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

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

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

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

list->size--;}//

查詢結點

int find_linklist(linklist* list, linknode*data, comparenode compare)

int flag = -1

;

int index = 0

; linknode* pcurrent = list->head.next;

while (pcurrent !=null)

pcurrent = pcurrent->next;

index++;

}return

flag;}//

返回鍊錶的大小

int size_linklist(linklist*list)

return list->size;}//

列印鍊錶

void print_linklist(linklist*list, printlinknode print)

linknode* pcurrent = list->head.next;

while (pcurrent !=null)

}//釋放記憶體

void freemem_linklist(linklist*list)

free

(list);

}

main.cpp

#include "

linklist.h

"typedef

struct

personperson;

void myprint(linknode*data)

int mycompare(linknode* node1, linknode*node2)

return -1;}

intmain()

鍊錶 單向鍊錶

討論單鏈表之前,我們先來討論下面這個問題。順序表存在的一些問題 中間 頭部的插入刪除,時間複雜度為o n 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗。增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以後增容到200,我們再繼續插入了5個資料,後面沒有資料插入了...

鍊錶(單向鍊錶,雙向鍊錶)

首先鍊錶是以節點的方式儲存資料的,每個節點包含資料域 data 節點域 next 鍊錶的每個節點在計算機中儲存的位置是不連續的和隨機的,優點就是資料的插入和刪除比較好,而查詢資料效率不是太好 因為鍊錶無法像靜態資料一樣隨機讀取資料,必須按照順序找到對應的資料為止 單向鍊錶就像是火車,所有的節點串聯成...

C實現單向鍊錶(創造鍊錶)

include include typedef struct nodenode,pnode pnode create list void intmain pnode create list void pnode ptail phead 首尾同一節點 鍊錶 頭尾節點都應該在最開始就定義出來,頭就是第乙...