2 3 2 使用陣列模擬鍊錶

2022-09-07 00:18:19 字數 1641 閱讀 1732

鍊錶也可以使用陣列來實現,操作和基礎知識比指標簡單

但是個人覺得就思路和操作的清晰,以及對鍊錶的理解而言,還是用指標好

比如現在二者如下:

位置 1 2 3 4 5 06 07 08 09

data: 2 3 5 8 9 10 18 26 32

right: 2 3 4 5 6 7 8 9 0

right[9] = 0 ,就代表data第九位的的右邊沒有資料

這裡說一下,眾所周知陣列的第一位下標是0,但是書裡按1開始算了

本著以書為本的原則,就沒有修改,況且對於做鍊錶而言也沒區別

就是習慣了0開始數,看著難受

再如right[1]的值是2,指的是1號元素的右邊的元素是2號元素(存放在data[2]中)

下面嘗試按大小順序,把6這個數值加入進去,那麼該怎麼做呢?

對於data陣列比較簡單,我們只需要做新增資料這個操作

讓我們把這個資料新增到10號位置

位置 1 2 3 4 5 06 07 08 0910

data: 2 3 5 8 9 10 18 26 326

對於right陣列,會複雜一點,畢竟要排序和改位址

我們通過觀察data陣列,我們的6需要新增到5和8之間,也就是3號元素和4號元素之間

5對應的號數是3,8則是4.原本的位址是3號->4號,現在我們要加入6

那麼我們新的次序是3號->10號->4號,即:

1.把3號「右邊一位」改成10號

2.把10號「右邊一位」改成4號

3.4號「右邊一位」不變

位置 1 2 3 4 5 06 07 08 09 10

data: 2 3 5 8 9 10 18 26 32 6

right: 2 3105 6 7 08 09 04

# include int main()

len = n ;

//初始化陣列

for(i = 1 ; i<= n ,i++)

//直接在陣列data末尾增加乙個數

len++;

scanf("%d",&data[len]);

//從鍊錶透開始遍歷

t = 1 ;

while(t!=0)

t = right[t] ;

}//輸出鍊錶中所有的數

t = 1 ;

while(t!=0)

getchar();

getchar();

return 0 ;

}

模擬鍊錶以兩個對應的陣列,代替了指標

兩者各有優劣,但是指標用的應該更多,畢竟你陣列大小存在著限制

可以把模擬鍊錶作為簡單/削弱版的鍊錶

不過,使用模擬鍊錶一樣可以實現雙向鍊錶和迴圈鍊錶,這裡就先不提了

陣列模擬鍊錶

單鏈表 include using namespace std int head 1 idx 0,e 100005 ne 100005 void add head int x void remove int k void add int k,int x intmain else if a d 刪除元...

陣列模擬鍊錶

單鏈表 實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按...

陣列模擬鍊錶(靜態鍊錶)

為了模擬鍊錶的操作,設定了乙個date 資料 以及cur 相當於指標域 typedef struct list list s size size為陣列大小 我們用s size 1 cur來起頭指標的作用,指向鍊錶的第乙個元素的下標。因為不能直接malloc出來乙個空間,需要s 0 來儲存乙個空的陣列...