線性表的資料結構圖:
鍊錶簡介:
鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列節點組成,這些節點不必在記憶體中相連。每個節點由資料部分data和鏈部分next,next指向下乙個節點,這樣當新增或者刪除時,只需要改變相關節點的next的指向,效率很高。
鍊錶的實現還有其它的方式,常見的有迴圈單鏈表,雙向鍊錶,迴圈雙向鍊錶。 迴圈單鏈表 主要是鍊錶的最後乙個節點指向第乙個節點,整體構成乙個鏈環。 雙向鍊錶 主要是節點中包含兩個指標部分,乙個指向前驅元,乙個指向後繼元,jdk中linkedlist集合類的實現就是雙向鍊錶。** 迴圈雙向鍊錶** 是最後乙個節點指向第乙個節點。
操作的原始碼如下:
package com.wpao.data;
public class nodetest
/*** 刪除特定元素:
* @param head
* @param i
* @return
*/public noderemove(nodehead,int i)
curr = head;
int j = 1;
while(curr != null)
previous.next = curr.next;
return head;
}previous = curr;
curr = curr.next;
j+=1;
} return head; }
/*** 獲取特定元素:
* @param head
* @param i
* @return
*/public nodeget(nodehead,int i)
curr = head;
int j = 1;
while(curr != null)
curr = curr.next;
j+=1;
} return null; }
/*** 將鍊錶的順序進行反**逐一改變相鄰兩節點之間的關係,返回之前的尾節點處理;
* 注意點:物件的引用是同乙個記憶體區域,乙個引用修改,另乙個引用也發生修改;
* @param head
* @return
*/public nodefanzhuannode (nodehead)
curr.next = previous;
previous = curr;
curr = next;
} return null; }
/*** 倒序便利:採用遞迴的思想,逐步取出最後乙個元素,後輸出;
* @param head
*/public void reversenode (nodehead) }
/*** @param head 頭節點:
*/public void eachnode(nodehead)
nodecurr = head;
while(curr != null) }
/*** 構造鍊錶:
* @param head 頭節點;
* @param tail 尾節點;
*/public nodeconstructnode(nodehead)
return head; }}
/** * 節點宣告:
* @author dada
* * @param */
class node
}class students
public int getid()
public void setid(int id)
public string getname()
public void setname(string name)
@override
public string tostring()
}
鍊錶的倒序查詢
我所使用的方法在輸入的時候是使用乙個棧儲存所有的資料,利用的是其先進後出的資料結構。當然,用乙個陣列也是可以的 而且我覺得還可以儲存資料,而用stack的話操作比較麻煩。include include include include define len sizeof node using name...
面試題6 倒序輸出鍊錶
思路有兩個 1 利用遞迴思路,這樣比較耗時,但是省空間。2 既然能夠使用遞迴,就能使用棧來操作。首先要涉及到鍊錶的定義和初始化 struct linknode intmain 這裡需要註明 nullptr是c 11才開始使用的關鍵字,為了和c中的null區別。c中的null表明的是乙個void指標,...
1 單向鍊錶(建立,輸出,倒序輸出,轉置)
1.建立 通過頭尾指標建立乙個單向鍊錶 2.輸出 3.倒序輸出 遞迴 4.轉置 用三個指標,乙個被指向p1,乙個指向p2,乙個斷開p3 實現 include include typedef struct node list 建立 list createlist else 尾的下乙個等於temp 尾移...