c語言中連結串列的具體用途
1樓:匿名使用者
鍊表是一種資料結構 是一種線形的儲存結構 轉乙個小文章。
c/c++ code 準備:動態記憶體分配 一、為什麼用動態記憶體分配 但我們未學習鍊表的時候,如果要儲存數量比較多的同型別或同結構的資料的時候,總是使用乙個陣列。比如說我們要儲存乙個班級學生的某科分數,總是定義乙個float型(存在分)陣列:
float score[30]; 但是,在使用陣列的時候,總有乙個問題困擾著我們:陣列應該有多大? 在很多的情況下,你並不能確定要使用多大的陣列,比如上例,你可能並不知道該班級的學生的人數,那麼你就要把陣列定義得足夠大意兄弟幾個當初一家子,都在一塊住,這就是陣列。
後來都成家了,在一起住不方便,就各自分開住了,但形式上還是一家,這就是鍊表。
怎樣更好的理解c++中的鍊表的使用?
2樓:匿名使用者
鍊表是一種有序的列表,鍊表的內容通常是儲存與記憶體中分散的位置上。
鍊表的方式有兩種1:一種是利用陣列結構串連的有序列表。
例如;兩個陣列,乙個存放資料,另乙個存放連線的關係。這種缺乏彈性。
2:以動態記憶體配置的鍊表,(通常指的鍊表是一動態記憶體分配的鍊表)動態記憶體配置的鍊表,是由許許多多的(node)所鏈結而成的,每乙個結點,包含了資料部分和指向下乙個結點的指標(pointer)。
以動態記憶體配置的鍊表,在插入和刪除元素的時候,只需要將指標改變指向就可以。
鍊表和陣列一樣是一種資料結構,如何使用完全基於你的應用需求。
鍊表和c++語言本身沒有任何聯絡。很多語言都可以實現鍊表資料結構。
我講一下資料和鍊表的區別有可能幫助你對鍊表的使用有個感覺。
陣列是將元素在記憶體中連續存放,由於每個元素占用記憶體相同,所以你可以通過下標迅速訪問陣列中任何元素。但是如果你要在陣列中增加乙個元素,你需要移動大量元素,在記憶體中空出乙個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果你想刪除乙個元素,你同樣需要移動大量元素去填掉被移動的元素。
鍊表恰好相反,鍊表中的元素在記憶體中不是順序儲存的,而是通過存在元素中的指標聯絡到一起。比如:上乙個元素有個指標指到下乙個元素,以此類推,直到最後乙個元素。
如果你要訪問鍊表中乙個元素,你需要從第乙個元素開始,一直找到你需要的元素位置。但是增加和刪除乙個元素對於鍊表資料結構就非常簡單了, 只要修改元素中的指標就可以了。
從上面的比較你可以看出,如果你的應用需要快速訪問資料,很少或不插入和刪除元素,你就應該用陣列;相反, 如果你的應用需要經常插入和刪除元素你就需要用連結串列資料結構了。然後你自己可以想一想什麼樣的應用用連結串列合適。
另外,建議你找一本好一點的關於資料結構的書,裡面應該關於鍊表和其上演算法的詳細介紹。鍊表本身是乙個複雜的資料結構,而且包括很多種類,比如單向鍊表,雙向鍊表,樹,圖等,不是一篇文章可以介紹得清楚的。
3樓:匿名使用者
我簡單的用比喻來說明。剩下的還是得靠自己對程式設計的悟性了。
首先,我們把鍊表的節點比喻成火車的車廂。每節車廂的前面都有乙個鉤子,我們把這想想成指標,他用來連線上一節車廂。
接著,使用尾插法的話,也就是先要找到火車尾,即連結串列的尾指標。然後把自己要加進去的車廂掛到火車的最後面。最後標記這節車廂為火車尾(把位址賦值給尾指標)。
使用頭插法的話,就是先找到火車頭,即連結串列的頭指標。然後把頭指標後面的那節車廂掛到你要插入鍊表的那節車廂的後面。最後在把插入鍊表的那節車廂掛到火車頭去(把位址賦值給頭指標)。
舉例:(火車車廂)
struct node
火車頭)node* head;
火車尾)node* end;
車廂1)node* m1;
車廂2)node* m2;
開始前鍊表只有火車頭,後面沒有車廂,車頭也是車尾。
head=end=null;
1.頭插法。
申請車廂1m1=new node;
m1->next=null;
if(head==null) /如果只有火車頭執行這裡面的。
else //如果除了火車頭還有其他車廂執行這裡面的。
2.尾插法。
申請車廂2m2=new node;
m2->next=null;
if(head==null) /如果只有火車頭執行這裡面的。
else //如果除了火車頭還有其他車廂執行這裡面的。
4樓:匿名使用者
struct list
鍊表其實是一種資料結構。一種邏輯鏈式儲存資料的方式。它由很多的節點連線組成的方式。
簡單的如上麵定義,number表示內容,next表示指向下乙個節點的指標。通過這個指標就可以將很多的節點相連起來。簡單的說就是通過這個指標知道當前節點下乙個節點連線到什麼地方去。
如此把所有的節點都連線到一起。並給出乙個頭節點,也就是鍊表的第乙個節點的指標方便你的操作。
list *head = null;
頭上新增乙個節點函式:
void addnodetohead()
在尾部新增乙個節點。
void addnodetoend()
加入。}刪除乙個節點其實就是在鍊表中查詢內容等於要刪除節點內容的節點,然後刪除。
在查詢待刪除節點data時,記錄它的前乙個節點predata.
則關鍵語句為:
delete data;//刪除當前節點的空間。
c語言裡面的鍊表是什麼
5樓:永桂花佴風
c語言裡面的鍊表是一種資料結構。
是一種線形的儲存結構。
鍊表和陣列一樣,也是將一組同型別的資料組織在一起的一種資料結構。
不同的是。陣列採用的是順序儲存,依靠陣列的首位址和元素的相對位址(下標)來實現訪問。
優點是訪問方便快捷,而缺點是陣列是靜態的,不利於實現元素的動態增減。
而鍊表採用的是離散儲存,依靠節點間的指向下乙個節點的指標來實現訪問。
其優缺點和陣列相反。
關於c語言鍊表?
6樓:我就是很煩
因為你隻建立了乙個啊,你的本意是用create函式執行建立鍊表的工作,不管多少個都是由它完成的,但是你的create函式明明沒有while迴圈或者do while迴圈啊,只做了一遍啊,第一遍的if做完了,第乙個鍊表完成了,再次scanf了之後,就退出來了啊,在你建立了乙個鍊表之後,就在那個鍊表的尾部寫入null了,程式就結束了啊,又沒一直做scanf,和建立鍊表的工作。create沒迴圈啊,列印鍊表是沒錯啊,輸出了第乙個啊,你自己建立的第乙個叫head,只有後面的鏈結,自己本身沒有存放任何數,只輸出了第二個鍊表,第二鍊表的next就是null了,輸出當然就停止了啊。
怕我沒說清楚,或者把你繞暈了,所以我截個圖給你看。
你這個if只做了一遍啊,沒有迴圈啊,然後就再次用scanf了,然後呢?然後就退出if了吧,然後就執行了r->next=null;對吧,r不就是你建立的第乙個有資料的鍊表嗎?然後就return h了,那麼只有乙個啊,有迴圈嗎?
scanf了之後,也沒判斷數值啊,不是-1,應該繼續做啊。
解決方案:在這個if的外面,加乙個do while的迴圈,然後判斷scanf讀入的n的值,應該就可以了。
c語言鍊表要怎麼學啊
7樓:在蘊秀帖唱
鍊表是乙個很簡單的結構,對於單連結串列來說,它的每乙個節點都是乙個結構,在這個結構中有兩個變數,乙個用來資料,為你想要存放的資料型別,乙個是這種結構型別的指標,指向下乙個結構型別。
當需要定義乙個鍊表時首先定義乙個頭指標或者頭結點(頭結點鐘不存放任何資料,所以可以用頭指標來代替。)插入資料有三種方法,一是在頭部插入,一是在尾部插入,一是在中間某個節點位置插入。
在頭部插入時,要首先把原來的頭指標的位址付給當前節點的指標,然後讓頭指標指向這乙個節點。這樣要是獲取原有的第一節點時(頭指標假設為0),就需要首先通過頭結點的指標找到當前節點,在通過當前節點的指標找到原來的1節點(不過現在應該是第二個了)。
另外的兩種於這個類似,就不再贅述了。
鍊表就是這個樣子,只能通過指標乙個乙個的找,查詢與遍歷都非常的費事,但是插入與刪除時節省了大量的資料移動的時間。而且長度是不受限制。
你不理解連結串列的實質是你對指標和它的使用機制不熟悉,你嘗試把書上的**敲到電腦上,一行一行的編寫注釋,然後編寫測試程式,體驗各種操作,你就能明白了,但是要想徹底明白還是要寫很多的有關指標的程式以後,徹底明白了指標,才能明白。
8樓:東方採楓鐘希
不用管,不是重點,如果要學,看資料結構,這是資料結構這門課的內容。我們上課在用機械工業出版社,陳守孔編的《演算法與資料結構c語言版》,因為陳守孔就是我們主任,,,我建議你學好指標就夠,等資料結構再學鍊表,畢竟,寫好乙個程式也不是光學好這門語言就行的。
求c語言鍊表的詳細講解
9樓:網友
鍊表是一種常見的重要的資料結構。它是動態地進行儲存分配的一種結構。我們知道,用陣列存放資料時,必須事先定義固定的長度(即元素個數).比如,有的班級有100人,而有的班只有30人,如果要用同乙個陣列先後存放不同班級的學生資料,則必須定義長度為100的陣列。如果事先難以確定乙個班的最多人數,則必須把陣列定得足夠大,以能存放任何班級的學生資料。
顯然這將會浪費記憶體。鍊表則沒有這種缺點,它根據需要開闢記憶體單元。圖表示最簡單的一種鍊表(單向鍊表)的結構。
鍊表有乙個"頭指標"變數,圖中以head表示,它存放乙個位址。
該位址指向乙個元素。鍊表中每乙個元素稱為"結點",每個結點都應包括兩個部分:一為使用者需要用的實際資料,二為下乙個結點的位址。
課以看出,head指向第乙個元素;第乙個元素又指向第二個元素;……直到最後乙個元素,該元素不再指向其它元素,它稱為'表尾",它的位址部分放乙個"null"(表示"空位址").鍊表到此結束。
可以看到:鍊表中各元素在記憶體中可以不是連續存放的。要找某一元素,必須先找到上乙個元素,根據它提供的下一元素位址才能找到下乙個元素。
如果不提供"頭指標"(head),則整個鍊表都無法訪問。鍊表如同一條鐵鍊一樣,一環扣一環,中間是不能斷開的。打個通俗的比方:
幼兒園的老師帶領孩子出來散步,老師牽著第乙個小孩的手,第乙個小孩的另乙隻手牽著第二個孩子,……這就是乙個"鏈",最後乙個孩子有乙隻手空著,他是"鏈尾".要找這個隊伍,必須先找到老師,然後順序找到每乙個孩子。
c語言連結串列問題,c語言連結串列的問題
連結串列必須知道頭指標在哪第一個紅圈是初始化指標 因為你剛開始定義連結串列指標的時候指標指向的是隨機的 所以只能初始化 第二個紅圈是第一次給連結串列分配空間 如果頭指標為空就把連結串列指標給頭指標 這倆個語句確實只執行一次 但我沒理解你話的意思 你的理解當然不對了。前一個頭 head 尾 tail ...
在C語言中,什麼是連結串列呀,C語言中連結串列怎麼定義?
呵呵 ls回答的太全面了 我簡單概括一下吧 簡單的說,連結串列就是一串儲存資料的鏈式結構。鏈式的優點在於,每個資料之間都是相關聯的,你如果拿掉其中一個資料,整個連結串列就斷了,需要重新把斷開的部分連上,就像一條鎖鏈一樣。而你要新增一個資料,也要先斷開一個鎖鏈,把資料加進去,再重新連上。就是這麼簡單!...
有關C語言中動態連結串列的問題
非常敬佩你的專研精神,我仔細看完了你的 做了小小的修改,如果有其他問題歡迎追問哈 include include include include struct list struct list head null int main if head null else l p2 next null p...