鍊錶 基於C語言

2021-10-09 02:29:26 字數 3485 閱讀 5486

最近複習了c語言的一些知識,使用c語言實現了資料結構中的鍊錶。

下面是main.c檔案:

#include

"linklist.h"

#include

intmain()

printf

("len = %d\n\n"

,linklistlength

(list));

for(i =

0; i <

5; i++

)printf

("len = %d\n\n"

,linklistlength

(list));

i =0;

printf

("開始列印鍊錶:\n");

for(

linklistmove

(list,0)

;!linklistend

(list)

;linklistnext

(list)

, i++)

list =

linklistdestroy

(list);}

return0;

}

下面是linklist.**件

#ifndef __linklist_h__

#define __linklist_h__

typedef

int datatype;

#define debug() printf("file = %s\nline = %d\n", __file__, __line__)

#include

#include

#ifndef __cplusplus

typedef

enum

bool;

else

typedef bool bool;

#endif

#define malloc(type, size) (type*)malloc(sizeof(type) * size)

#define free(p) (free(p), p = null)

#define struct(type) typedef struct __struct##type type;\

struct __struct##type

struct

(llnode)

;struct

(linklist)

;linklist*

linklistcreate

(void);

linklist*

linklistdestroy

(linklist *list)

;int

linklistlength

(linklist *list)

;bool linklistinsert

(linklist *list,

int i, datatype data)

;bool linklistdelete

(linklist *list,

int i, datatype *data)

;int

linklistfind

(linklist *list, datatype data)

; bool linklistset

(linklist *list,

int i, datatype data)

;bool linklistget

(linklist *list,

int i, datatype *data)

;llnode*

linklistmove

(linklist *list,

int i)

;bool linklistend

(linklist *list)

;void

linklistnext

(linklist *list)

;datatype linklistcurrent

(linklist *list)

;#endif

下面是linklist.c檔案

#include

"linklist.h"

linklist*

linklistcreate

(void

)//o(1)

return list;

}linklist*

linklistdestroy

(linklist *list)

//o(n)

free

(list);}

return

null;}

intlinklistlength

(linklist *list)

//o(1)

bool linklistinsert

(linklist *list,

int i, datatype data)

//o(n)

else

list->len++;}

else

}return ret;

}bool linklistdelete

(linklist *list,

int i, datatype* data)

//o(n)

else

free

(node)

; list->len--;}

return ret;

}bool linklistset

(linklist *list,

int i, datatype data)

//o(n)

bool linklistget

(linklist *list,

int i, datatype* data)

//o(n)

//下面四個配合使用用於遍歷鍊錶,時間複雜度為o(n)

llnode*

linklistmove

(linklist *list,

int i)

ret = node;

list->m_current = node;}}

return ret;

}bool linklistend

(linklist *list)

void

linklistnext

(linklist *list)

}datatype linklistcurrent

(linklist *list)

intlinklistfind

(linklist *list, datatype data)

//o(n)}}

return ret;

}

下面是dos執行的結果:

雙向鍊錶 基於C語言

最近複習了c語言的相關知識,實現了資料結構裡面的雙向鍊錶。下面是main.c檔案 include duallinklist.h include intmain printf 開始列印鍊錶 n i 0 for duallinklistmove list,duallinklistlength list ...

C語言基於鍊錶的佇列

寫了乙個基於鍊錶的佇列,非常簡單,只提供了初始化,判斷是否為空,銷毀,入隊和出隊操作,可以很容易的嵌入到工程中去。只提供了很少的注釋,好的 是可以自注釋的,另外如果對於c語言和佇列這個資料結構較熟悉的話,看懂我的 裡的一些指標操作是很容易的。在最下面提供了乙個測試程式,也可以看成使用指南,queue...

C語言基於鍊錶的棧

學習資料結構與演算法時實現的棧,參考書目 資料結構與演算法分析 c語言描述 以及在後面會分析我遇到的乙個問題。標頭檔案 stack.h 功能 基於鍊錶的棧,棧頂在表頭 ifndef stack header h define stack header h typedef struct node pn...