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