❶ 請教大家:靜態鏈表是順序存儲結構,還是鏈式存儲結構
所謂靜態,僅僅是在編譯的時候就分配好了內存地址而已;
靜態鏈表還是鏈表,你看你的鏈表創建方法就知道了,它是一個節點一個節點創建的,每次申請節點的內存地址不是連續的,這和靜態與動態無關,所以不是順序存儲結構;
極端一點的情況是,就算真的所有節點都是在內存中按順序排列的,鏈表依然是鏈式存儲結構,因為它每次查找下一個節點時,是通過自己存儲的地址指針去找的,而不是在自身地址上+1去找的,就算這兩個的計算結果相同,但定址方式不同,後者才是順序存儲結構
❷ c/c++ 靜態鏈表是什麼意思
你這個是動態的,在使用的過程中可以不斷的加入數據,靜態的就是不變的,一開始就給定了大小,這就是一維數據,這個數組裡面存放著節點信息,例如
struct node{
int data;
int record;
}nodetemp;
你每次輸入都是輸入到nodetemp中
定義靜態數組 node arrey[100]; 這就是靜態的,它是node類型,裡面可以存放100個node數據。
這樣輸入數據;
for(int i=0;i<100;i++){
scanf("%d%d",&nodetemp.data,&nodetemp.record);
arrey[i]=nodetemp;
}
懂了吧?
❸ 靜態鏈表和動態鏈表的區別是什麼
靜態鏈表和動態鏈表的區別:
靜態鏈表和動態鏈表是線性表鏈式存儲結構的兩種不同的表示方式。
1、靜態鏈表是用類似於數組方法實現的,是順序的存儲結構,在物理地址上是連續的,而且需要預先分配地址空間大小。所以靜態鏈表的初始長度一般是固定的,在做插入和刪除操作時不需要移動元素,僅需修改指針。
2、動態鏈表是用內存申請函數(malloc/new)動態申請內存的,所以在鏈表的長度上沒有限制。動態鏈表因為是動態申請內存的,所以每個節點的物理地址不連續,要通過指針來順序訪問。
❹ 靜態鏈表中指針表示的是( )
靜態鏈表中指針表示的是下一元素地址。
用數組描述的鏈表,即稱為靜態鏈表。對於線性鏈表,也可用一維數組來進行描述。這種描述方法便於在沒有指針類型的高級程序設計語言中使用鏈表結構。在C語言中,靜態鏈表的表現形式即為結構體數組,結構體變數包括數據域data和游標CUR。
靜態鏈表是線性存儲結構的一種,兼顧順序表和鏈表的優點,是順序表和鏈表的升級。靜態鏈表的數據全部存儲在數組中(順序表),但存儲的位置是隨機的,數據直接的一對一關系是通過一個整型變數(稱為游標,類似指針的功能)維持。
靜態鏈表中,除了數據本身通過游標組成鏈表外,還需要有一條連接各個空閑位置的鏈表,稱為備用鏈表。回收數組中未使用或者之前使用過的存儲空間,留待後期使用。即靜態鏈表使用數組申請的物理空間中,存在兩個鏈表,一條連接數據,另一條連接數組中為使用的空間。
❺ 動態鏈表和靜態鏈表
方式一:鏈表通常可以使用 結構體+指針 來實現[ 動態鏈表 ]
這是第一種實現方式,但是這種方式有一些弊端,比如鏈表添加節點需要 new 一個新的 Node ,new是非常慢的過程,還消耗內存資源。演算法題中鏈表的大小一般是100萬級別,單單new出100萬個節點就已經會超時了。
方式二:數組模擬鏈表[ 靜態鏈表 ] 每一個節點提前准備好,沒有指針的語言中可以使用
好處:快!而且普通鏈表的功能比如排序也都有,就是實現起來麻煩一點~。
特點:鏈表的實現也是可以不藉助指針的。
單鏈表往往需要 head 來指向第一個節點;但是雙鏈表不需要 head ,而是直接使用兩個數(0,1)來表示初始左右節點,但是這兩個節點裡面沒有值,注意idx需要從 2 開始。
Acwing: 雙鏈表
實現一個雙鏈表,雙鏈表初始為空,支持 5 種操作:
在最左側插入一個數;
在最右側插入一個數;
將第 k 個插入的數刪除;
在第 k 個插入的數左側插入一個數;
在第 k 個插入的數右側插入一個數
現在要對該鏈表進行 M 次操作,進行完所有操作後,從左到右輸出整個鏈表。
注意:題目中第 k 個插入的數並不是指當前鏈表的第 k 個數。例如操作過程中一共插入了 n 個數,則按照插入的時間順序,這 n 個數依次為:第 1 個插入的數,第 2 個插入的數,…第 n 個插入的數。
實現一個雙鏈表,雙鏈表初始為空,支持 5 種操作:
在最左側插入一個數;
在最右側插入一個數;
將第 k 個插入的數刪除;
在第 k 個插入的數左側插入一個數;
在第 k 個插入的數右側插入一個數
現在要對該鏈表進行 M 次操作,進行完所有操作後,從左到右輸出整個鏈表。
注意:題目中第 k 個插入的數並不是指當前鏈表的第 k 個數。例如操作過程中一共插入了 n 個數,則按照插入的時間順序,這 n 個數依次為:第 1 個插入的數,第 2 個插入的數,…第 n 個插入的數。
❻ 靜態鏈表的特點
靜態鏈表這種存儲結構,仍需要預先分配一個較大的空間,但在作為線性表的插入和刪除操作時不需移動元素,僅需修改指針,故仍具有鏈式存儲結構的主要優點。
假如有如上的靜態鏈表S中存儲著線性表(a,b,c,d,f,g,h,i),Maxsize=11,如圖所示,要在第四個元素後插入元素e,方法是:先在當前表尾加入一個元素e,即:S[9].data = e;然後修改第四個元素的游標域,將e插入到鏈表中,即:S[9].cursor = S[4].cursor;S[4].cursor = 9;,接著,若要刪除第7個元素h,則先順著游標鏈通過計數找到第7個元素存儲位置6,刪除的具體做法是令S[6].cursor = S[7].cursor。
(6)數組存儲靜態鏈表擴展閱讀:
靜態鏈表中,除了數據本身通過游標組成鏈表外,還需要有一條連接各個空閑位置的鏈表,稱為備用鏈表。
作用:回收數組中未使用或者之前使用過(現在不用)的存儲空間,留待後期使用。即靜態鏈表使用數組申請的物理空間中,存在兩個鏈表,一條連接數據,另一條連接數組中為使用的空間。
註:通常備用鏈表的表頭位於數組下標為0(a[0])的位置,而數據鏈表的表頭位於數組下標為1(a[1])的位置。