C語言中實現通用雙鏈表 類似C 模版的功能

2021-09-08 08:27:47 字數 2791 閱讀 1939

這篇文章,本來寫了快兩個小時了,可是提交的時候,居然崩潰了。資訊全部都丟失了。

既然這樣,那就不囉嗦了,直接拷貝**。

插入**的功能也壞了,那就直接複製把:

/*** c 和 c++ 的誰好誰壞的爭論還在不斷的繼續,c語言的使用非常的廣範,很多大型的系統都是用c 語言來寫的。

* c++ 似乎有更好的程式設計正規化。支援物件導向,模版,省去了很多處理。

* c++ 最好不要濫用,具體問題,具體分析。**/

#include

#include

/*** 通用鍊錶宣告部分

*/struct list_head ;

#define list_head_init(name)

#define list_head(name) \

struct list_head name = list_head_init(name)

#define init_list_head(ptr) do while (0)

static  void __list_add(struct list_head * new, struct list_head * prev, struct list_head * next);

static  void list_add(struct list_head *new, struct list_head *head);

static  void list_add_tail(struct list_head *new, struct list_head *head);

static  void __list_del(struct list_head * prev, struct list_head * next);

static  void list_del(struct list_head *entry);

static  void list_del_init(struct list_head *entry);

static  int list_empty(struct list_head *head);

static  void list_splice(struct list_head *list, struct list_head *head);

#define list_entry(ptr, type, member) \

((type *)((char *)(ptr)-(size_t)(&((type *)0)->member)))

#define list_for_each(pos, head) \

for (pos = (head)->next; pos != (head); pos = pos->next)

#define new_list_node(type, node) \

#define free_list(type, p, list_name)\\}

/*** 通用鍊錶實現部分

*/static  void __list_add(struct list_head * new, struct list_head * prev, struct list_head * next)

static  void list_add(struct list_head *new, struct list_head *head)

static  void list_add_tail(struct list_head *new, struct list_head *head)

static  void __list_del(struct list_head * prev, struct list_head * next)

static  void list_del(struct list_head *entry)

static  void list_del_init(struct list_head *entry)

static  int list_empty(struct list_head *head)

static  void list_splice(struct list_head *list, struct list_head *head)

}typedef struct int_list

int_list, *pint_list;

void test_int_list()

list_for_each(pos, &dlink->list)

free_list(int_list, dlink, list);

printf("\n");

}typedef struct string_list

string_list, *pstring_list;

void test_string_list()

;struct string_list *dlink, *newnode, *posnode;

struct list_head *pos;

int i, length;

length = sizeof(strings) / sizeof(char *);

new_list_node(string_list, dlink);

init_list_head(&dlink->list);

for (i = 0; i < length; i++)

list_for_each(pos, &dlink->list)

free_list(string_list, dlink, list);

printf("\n");

}int main()

posted @

2009-11-13 17:45

暮夏 閱讀(

...)

編輯收藏

C語言 雙鏈表

還是 程式設計師面試寶典 上的 include include typedef struct student dnode 建立雙鏈表 dnode create else cycle 0 p next null p head head head next head pre null free p 釋放...

雙鏈表 C語言

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。簡單圖示 這次寫的雙鏈表的頭結點是不儲存資料的,所有資料都是存於頭結點的下乙個結點,即所有判斷都以頭結點的下乙個結點為準。資料簡介typedef struct dnode link 函式簡介link cre...

C 實現雙鏈表

主要實現了頭插,頭刪,尾插尾刪,任意位置的插入刪除,鍊錶的逆置以及鍊錶的深淺拷貝 在這裡說明一下,鍊錶用的最多的就是資料的插入什麼的,所以這裡解決深淺拷貝問題,用的是深拷貝,單鏈表,順序表也是一樣,都是用了深拷貝。雙向煉表相比較於單鏈表而言,相對複雜一點,有兩個指標,來進行實現鏈式結構 先面試具體 ...