-
讓我們打個比方。 將鍊表節點視為乙個人,將鍊表指標視為人手(左手是前進指標,右手是後向指標)。
非迴圈單向鍊表如下所示:幾個人排成一排,每個人的右手指向他右邊的人,最右邊的人指向空氣(null)。 如果你想找到這一行中的任何人,你必須從行的頭部(鍊表標題)開始,朝你的手指方向看。
乙個圓形的單向鍊表是這樣的:幾個人圍成乙個圓圈,每個人舉起右手指向右邊的人,這樣每個人的右手都指向乙個人(如果只有乙個人,他的右手指向自己)。 從任何乙個人開始,你可以繼續沿著手指的方向迴圈,找到每個人。
非迴圈雙鏈表如下所示:連續的多個人,每個人舉起左手指向左邊的人,每個人舉起右手指向右邊的人,然後最左邊的人的左手指向空氣(null),最右邊的人的右手指向空氣(null)。 如果你想在這一行找到乙個目標人,你可以從任何人開始,嘗試在左邊方向找到它,如果你找不到它,你可以繼續在右邊方向搜尋,直到你找到目標人。
乙個圓形的雙鏈列表看起來像這樣:幾個人圍成一圈,每個人舉起左手指向左邊的人,每個人舉起右手指向他右邊的人,這樣每個人的左右手都可以指向乙個人(如果只有乙個人, 然後他的左手和右手都指向自己)。無論您選擇左手還是右手方向,您都可以繼續迴圈以找到每個方向。
-
鍊表與陣列一樣,是一種資料結構,如何使用它完全取決於應用程式的需求。
鍊表與 C++ 語言本身沒有聯絡。 有許多語言實現鍊表資料結構。
讓我談談資料和鍊表之間的區別,這可能有助於您了解鍊表的使用。
陣列是元素在記憶體中的連續儲存,由於每個元素占用相同的記憶體,因此可以通過下標快速訪問陣列中的任何元素。 但是如果要在陣列中新增乙個元素,則需要移動大量的元素,在記憶體中為某個元素騰出空間,然後將要新增的元素放入其中。 同樣的道理,如果要刪除乙個元素,還需要移動大量的元素來填充移動的元素。
相反,鍊表不是按順序儲存在記憶體中,而是通過元素中存在的指標鏈結在一起。 例如,上乙個元素具有指向下乙個元素的指標,依此類推,直到最後乙個元素。
如果要訪問鍊表中的元素,則需要從第乙個元素開始,然後一直到所需元素的位置。 但是對於鍊表資料結構來說,新增和刪除元素非常簡單,只需修改元素中的指標即可。
從上面的比較中可以看出,如果你的應用程式需要快速訪問資料,很少或沒有元素插入和刪除,你應該使用陣列; 相反,如果應用程式需要頻繁插入和刪除元素,則需要使用鍊表資料結構。 然後你可以自己想想什麼樣的應用程式適合鍊表。
此外,建議您找到一本關於資料結構的更好的書,其中應該對鍊表及其演算法進行詳細介紹。 鍊表本身是乙個複雜的資料結構,它包括很多型別,如單向鍊表、雙鏈表、樹、圖等,無法一文中明確介紹。
bool f=0;
for(int i=1000;i>=1;我--)從最大的數字 1000 開始,然後嘗試使用較小的數字。 >>>More