鍊錶的游標實現

2021-09-25 12:55:25 字數 1475 閱讀 1592

在最開始的學習中,我們實現鍊錶都需要依靠指標來連線鍊錶的各個節點,但是,在一些語言中是不支援指標的,那麼,在不使用指標的情況下,我們就無法實現鍊錶了嗎?當然不是,其實還有另一種鍊錶的實現方式——游標實現!

那麼如果想不使用指標,我們必須了解指標在鍊錶中的作用,我們來想一下,以前在寫鍊錶時,我們在那些地方用到了指標,首先當然是在鍊錶的節點定義中,用指標來指向下乙個節點,那麼我們要想辦法用乙個東西代替它,我們發現,其實陣列的下標完全可以充當指標,只要有了陣列下標,就可以輕而易舉的知道對應的元素了。以此為基礎,就可以想到,構造乙個結構體陣列,裡面有兩個變數,乙個存放元素的值,另乙個存放下乙個節點的下標值,充當指標作用。然後,我們要考慮分配和釋放記憶體單元的問題,首先,我們可以選定乙個節點作為頭節點,讓她一直指向下乙個空的陣列元素單元,由於陣列的大小是有限的,所以我們還需要考慮讓刪除的元素重新利用。只要知道了這些,那麼後面的具體實現其實就很簡單了,與以前的寫法相似。還要注意的的是,陣列是需要我們自己先進性初始化的,必須讓他們一開始就有乙個指向順序,如果不初始化就無法正確的分配新的空間,這一步在下面的main函式中給出。

具體實現如下所示

//測試函式與初始化

intmain()

insert2(1

,head,3)

;insert2(1

,2,4

);insert2(1

,3,5

);delect2(1

,5);

print2

(head)

;return0;

}//列印鍊錶

void

print2

(int head)

}

//節點定義

struct node2

;struct node2 cursor[10]

;//游標陣列

//釋放空間

void

ffree

(int s)

//分配空間

intmmalloc()

//插入元素

void

insert2

(int head,

int p,

int x)

}

//查詢元素

intfind2

(int head,

int x)

intfindprevious2

(int head,

int x)

//原理與普通鍊錶類似,只是寫法稍微改一下

//刪除元素

void

delect2

(int l,

int x)

}

鍊錶的游標實現

諸如basic和fortran等許多語言都不支援指標。如果需要鍊錶而又不能使用指標,這時我們可以使用游標 cursor 實現法來實現鍊錶。在鍊錶的實現中有兩個重要的特點 資料儲存在一組結構體中。每乙個結構體包含有資料以及指向下乙個結構體的指標。乙個新的結構體可以通過呼叫malloc而從系統全域性記憶...

鍊錶的游標實現

author bbird gl date 2019 7 17 description 鍊錶的游標實現標頭檔案 ifndef cursor h define cursor h define spacesize 100 typedef int elementtype typedef int ptrton...

鍊錶的游標實現

對於不支援指標的語言,鍊錶可以用游標來表示 鍊錶的游標實現 array陣列分兩部分,一部分為鍊錶部分,有乙個獨立頭節點,下標為1 另一部分為freelist部分,也有獨立的乙個節點,下標為0,對於此部分,相當於乙個棧 進行malloc操作時,從開頭 下標0後 取空間 進行free操作時,被free的...