鍊錶是一種重要的資料結構,相比於陣列,陣列更像是乙個順序表,陣列只要第乙個元素固定,那麼在他後面的元素的位址一定固定,陣列在記憶體中是一塊連續的儲存區域,我們可以根據下標找到他的每個元素,這是陣列和鍊錶的乙個區別
鍊錶,見名思意,乙個鍊子連線起來的表,元素之間的聯絡靠的是這個鍊子,這也決定了鍊錶中的每個元素不是連續的,第乙個元素在記憶體中的乙個地方,而下乙個元素可以在離他很遠的地方,他們之間有乙個鍊子連線著,這個鍊子準確來說是指標,第乙個元素指向第二個,依次指向下去,我們對某個元素進行操作的時候,我們只能從頭依次查詢找到這個元素再進行操作。單鏈表是指單向的鍊錶,我們只能從他的頭向後查詢,而雙向鍊錶,不光可以從頭部向後查詢,也可以從後向前查詢。
對鍊錶的操作也是很基本的操作,下面只是對單鏈表的操作
定義乙個節點類,定義他的資料域,和next指標(不能說是乙個指標,他是下乙個元素,指標更好理解)
package demo_linkedlist;在定義節點的時候,定義了乙個head頭節點,頭節點始終指向鍊錶中的第乙個元素。這樣對鍊錶中的第乙個資料進行操作的時候,可以方便些public class node
// public node(int element,node pre,node next)
public node(int element,node next)
@override
public string tostring()
}
乙個節點的初始化方法,為什麼倒過來定義,因為在定義指向下乙個元素的next指標的時候是先定義前乙個元素的next指向,然而後乙個節點還沒有定義,倒過來就解決了。
private node n10 = null;遍歷節點方法private node n8 = null;
private node n7 = null;
private node n6 = null;
private node n5 = null;
private node n4 = null;
private node n3 = null;
private node n2 = null;
private node n1 = null;
private node head = null;
public void init()
/**查詢結點值為a的某個節點* 列印每個節點的值
*/public void print()
system.out.println();
}
/**插入節點,這時候頭節點head的作用就用上了,當插入節點值小於鍊錶中的任何元素的時候,為了保證鍊錶的有序,只需要改變頭節點的指向就可以* 查詢結點的值
*/public node find(int a)
current = current.next;
} return current;
}
/**刪除某個節點的方法,由於單鏈表的特點,我們只能從前向後查詢,這樣當我們找到要刪除的節點的時候,由於前乙個節點已經過去了,所以我們只能獲得後乙個節點,改變不了前乙個節點的指向,解決的辦法就是只需要定義兩個節點,乙個指向前乙個,另乙個指向後乙個,每次遍歷的時候這兩個節點依次向後移動,當找到要操作的節點的時候,由於我們已經記錄了前乙個節點,這樣只需要見到的改變一下指向即可。* 插入乙個節點,並保證鍊錶依然有序
*/public node insert(int a)
if (current.element <= a && current.next.element > a)
current = current.next;
} if (current.element < a && current.next == null)
return current;
}
/**完整**:* 刪除值為a的節點
*/public node delete(int a)
current = current.next;
current1 = current1.next;
} if (current1.next == null)
return current;
}
package demo_linkedlist;如有不對的地方歡迎指正!/** * 在鍊錶中定義了乙個head頭節點,時鐘在鍊錶的頭部,在執行插入操作的時候會方便些
* */
public class linkedlists
public static void main(string args)
/*** 列印每個節點的值
*/public void print()
system.out.println();
} /**
* 查詢結點的值
*/public node find(int a)
current = current.next;
} return current;
} /**
* 插入乙個節點,並保證鍊錶依然有序
*/public node insert(int a)
if (current.element <= a && current.next.element > a)
current = current.next;
} if (current.element < a && current.next == null)
return current;
} /**
* 刪除值為a的節點
*/public node delete(int a)
current = current.next;
current1 = current1.next;
} if (current1.next == null)
return current;
}}
3單鏈表查詢插入刪除
include include define size sizeof struct linklist struct linklist int main void 頭節點建立成功 printf please inpput n n while 1 i n while i scanf s d p1 x 輸...
單鏈表插入刪除
在鍊錶的插入刪除操作上理解起來比順序表更為容易,其不需要變動在i位置前的所有的元素,只需要修改節點指標即可。插入 設在鍊錶的i位置插入新元素,設i 1節點的指標域為p,設插入的節點指標域為s,所以插入操作應該為 s next p next 將s的字尾改為p的字尾,p的字尾是原來的第i個點的指標域,將...
單鏈表的插入刪除
include using namespace std struct lnode void creat link lnode head head指標的引用,lnode head 傳遞的是指標,但是對於指標的原值卻發生了copy,這樣你雖然可以對指標指向的記憶體進行修改但是不能對指標進行修改。因此要傳...