鍊錶的通用實現方式

2021-08-19 14:38:13 字數 988 閱讀 1982

在鍊錶的使用時,結構物件所包含的資料各不相同,所以在鍊錶的儲存需要針對不同的鍊錶物件重複編寫相應的儲存方法,能不能實現一種通用的方式,能夠針對不同的結構物件,實現統一的儲存方法?當然能。

一般我們在儲存鍊錶時,都會儲存鍊錶物件結構的首位址,也就是結構指標。在計算機中,對於指標,在32位機器上,實際就是四個位元組的儲存單元,裡面儲存了結構的首位址。可以利用這一點,在物件結構的首元素上做文章。

首先,定義乙個物件,物件包含next指標和prev指標:

typedef

struct list_head

list_head_st;

鍊錶初始化

/* init list */

#define init_list_head(name)\

2.插入元素

static

void list_add(struct list_head * const pstrunew,

struct list_head *prev,

struct list_head *next)

/* add after head */

static

void list_add_head(struct list_head * const pstrunew, struct list_head *head)

/* add before head */

static

void list_add_tail(struct list_head * const pstrunew, struct list_head *head)

在定義物件結構時,將結構的首元素定義為struct list_head *next, *prev

typedef

struct test

test_st;

多型實現通用鍊錶

鍊錶節點的資料域型別不再為具體的資料型別,而是通過乙個基類指標引入,達到不借助模板而是通過多型實現通用鍊錶 define crt secure no warnings include include using namespace std class object virtual object vi...

通用鍊錶 通用鍊錶的基本使用

1.1雙向鍊錶指標域 從圖中可以看出雙向鍊錶的前向指標指向前乙個結點的首位址,後向指標指向下乙個節點的首位址,並且指標型別相同,且只能指向與自己型別相同的結構體。1.2通用鍊錶指標域 從圖中可以看出通用鍊錶的前向指標指向前乙個結點的指標域的首位址,後向指標指向下乙個節點的指標域的首位址,所以在不同的...

堆疊的鍊錶方式實現

除了公式化即陣列的實現方式,堆疊還可以用鍊錶的方式實現,這種方式對空間利用率更高。在使用鍊錶來表示堆疊時,必須確定鍊錶的哪一端對應於棧頂。如果把鍊錶的右端作為棧頂,那麼可以利用鍊錶操作 i n s e r t n x 和d e l e t e n x 來實現堆疊的插入和刪除操作,其中 n為鍊錶中的節...