資料結構 鍊錶4 企業鍊錶

2021-09-21 01:21:04 字數 4014 閱讀 5454

linklist.h

#ifndef linklist_h

#define linklist_h

#include#include//鍊錶結點

typedef struct linknode linknode;

//鍊錶

typedef struct linklistlinklist;

//比較函式指標

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

//遍歷函式指標

typedef void(*printnode)(linknode*);

#define comparenode_true 1

#define comparenode_false 0

//初始化鍊錶

linklist* init_linklist();

//插入

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

//刪除

void removebypos_linklist(linklist *list, int pos);

//查詢

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

//返回鍊錶大小

int getsize_linklist(linklist *list);

//列印

void print_linklist(linklist *list,printnode print);

//釋放鍊錶記憶體

void freespace_linklist(linklist *list);

#endif

linklist.c

#include"linklist.h"

//初始化鍊錶

linklist* init_linklist()

//插入

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

if (data == null)

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 findbyvalue_linklist(linklist *list, linknode *data, comparenode compare)

if (data == null)

//輔助指標變數

linknode* pcurrent = list->head.next;

int index=0;

int flag = -1;

while (pcurrent != null)

pcurrent= pcurrent->next;

index++;

} return flag;

}//返回鍊錶大小

int getsize_linklist(linklist *list)

//列印

void print_linklist(linklist *list, printnode print)

//輔助指標變數

linknode* pcurrent = list->head.next;

while (pcurrent != null)

}//釋放鍊錶記憶體

void freespace_linklist(linklist *list)

free(list);

}

linklistme.c

#include"linklist.h"

#include#include#includelinklist* init_linklist()

void insertbypos_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 findbyvalue_linklist(linklist *list, linknode *data, comparenode compare)

int flag;

int i = 0;

//輔助指標變數

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

//查詢刪除結點的前乙個結點

for (i = 0; i < list->size; i++)

pcurrent = pcurrent->next;

} return i;

}int getsize_linklist(linklist *list)

//不會

void print_linklist(linklist *list, printnode print)

void freespace_linklist(linklist *list)

企業鍊錶.c

#include"linklist.h"

#include#include#includetypedef struct person person;

void myprint(linknode * data)

int mycompare(linknode *node1, linknode *node2)

return -1;

}int main()

/執行結果/

/*name:eee age:50

name:ddd age:40

name:ccc age:30

name:bbb age:20

name:aaa age:10

位置:3

請按任意鍵繼續. . .

*/

執行結果:

資料結構 4 鍊錶

寫在開頭 節點 node 鍊錶資料結構建立 linkedlist,為保證節點資訊安全性,採用內部類方式進行構造 author by jiangyf classname linkedlist description 鍊錶 date 2019 9 28 13 08 public class linked...

資料結構鍊錶之迴圈鍊錶 4

迴圈鍊錶定義 迴圈鍊錶的構建 class node def init self,item self.item item self.next none first node aa second node bb third node cc forth node dd fifth node ee firs...

資料結構 鍊錶 雙向鍊錶

注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...