1樓:匿名使用者
連結串列是一種資料結構,通過節點間的相互指向串聯起來
dll是dynamic link libary 動態連線庫
二者沒啥聯絡
請問c++中的連結串列是什麼 新手
怎樣更好的理解c++中的連結串列的使用?
2樓:匿名使用者
連結串列是一種有序的列表,連結串列的內容通常是儲存與記憶體中分散的位置上。
連結串列的方式有兩種1:一種是利用陣列結構串連的有序列表。
例如;兩個陣列,乙個存放資料,另乙個存放連線的關係。這種缺乏彈性。
2:以動態記憶體配置的連結串列,(通常指的連結串列是一動態記憶體分配的連結串列)動態記憶體配置的連結串列,
是由許許多多的(node)所鏈結而成的,每乙個結點,包含了資料部分和指向下乙個結點的指標(pointer)。
以動態記憶體配置的連結串列,在插入和刪除元素的時候,只需要將指標改變指向就可以。
連結串列和陣列一樣是一種資料結構,如何使用完全基於你的應用需求。
連結串列和c++語言本身沒有任何聯絡。很多語言都可以實現連結串列資料結構。
我講一下資料和連結串列的區別有可能幫助你對連結串列的使用有個感覺。
陣列是將元素在記憶體中連續存放,由於每個元素佔用記憶體相同,所以你可以通過下標迅速訪問陣列中任何元素。但是如果你要在陣列中增加乙個元素,你需要移動大量元素,在記憶體中空出乙個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果你想刪除乙個元素,你同樣需要移動大量元素去填掉被移動的元素。
連結串列恰好相反,連結串列中的元素在記憶體中不是順序儲存的,而是通過存在元素中的指標聯絡到一起。比如:上乙個元素有個指標指到下乙個元素,以此類推,直到最後乙個元素。
如果你要訪問連結串列中乙個元素,你需要從第乙個元素開始,一直找到你需要的元素位置。但是增加和刪除乙個元素對於連結串列資料結構就非常簡單了, 只要修改元素中的指標就可以了。
從上面的比較你可以看出,如果你的應用需要快速訪問資料,很少或不插入和刪除元素,你就應該用陣列;相反, 如果你的應用需要經常插入和刪除元素你就需要用連結串列資料結構了。然後你自己可以想一想什麼樣的應用用連結串列合適。
另外,建議你找一本好一點的關於資料結構的書,裡面應該關於連結串列和其上演算法的詳細介紹。連結串列本身是乙個複雜的資料結構,而且包括很多種類,比如單向連結串列,雙向連結串列,樹,圖等,不是一篇文章可以介紹得清楚的。
3樓:匿名使用者
我簡單的用比喻來說明。剩下的還是得靠自己對程式設計的悟性了。
宣告:可以把向前掛車廂想象成把後一節車廂的位址賦值給前一車廂的next指標。
首先,我們把連結串列的節點比喻成火車的車廂。每節車廂的前面都有乙個鉤子,我們把這想想成指標,他用來連線上一節車廂。
接著,使用尾插法的話,也就是先要找到火車尾,即連結串列的尾指標。然後把自己要加進去的車廂掛到火車的最後面。最後標記這節車廂為火車尾(把位址賦值給尾指標)。
使用頭插法的話,就是先找到火車頭,即連結串列的頭指標。然後把頭指標後面的那節車廂掛到你要插入連結串列的那節車廂的後面。最後在把插入連結串列的那節車廂掛到火車頭去(把位址賦值給頭指標)。
舉例:(火車車廂)
struct node
;(火車頭)node* head;
(火車尾)node* end;
(車廂1)node* m1;
(車廂2)node* m2;
//開始前連結串列只有火車頭,後面沒有車廂,車頭也是車尾。
head=end=null;
//1.頭插法
//申請車廂1
m1=new node;
m1->next=null;
if(head==null) //如果只有火車頭執行這裡面的
else //如果除了火車頭還有其他車廂執行這裡面的
//2.尾插法
//申請車廂2
m2=new node;
m2->next=null;
if(head==null) //如果只有火車頭執行這裡面的
else //如果除了火車頭還有其他車廂執行這裡面的
4樓:匿名使用者
struct list
;連結串列其實是一種資料結構。一種邏輯鏈式儲存資料的方式。它由很多的節點連線組成的方式。
簡單的如上面定義,number表示內容,next表示指向下乙個節點的指標。通過這個指標就可以將很多的節點相連起來。簡單的說就是通過這個指標知道當前節點下乙個節點連線到什麼地方去。
如此把所有的節點都連線到一起。並給出乙個頭節點,也就是連結串列的第乙個節點的指標方便你的操作。
list *head = null;
頭上新增乙個節點函式:
void addnodetohead()
在尾部新增乙個節點
void addnodetoend()
// 加入
pend.next=data;
}刪除乙個節點其實就是在連結串列中查詢內容等於要刪除節點內容的節點,然後刪除。
在查詢待刪除節點data時,記錄它的前乙個節點predata.
則關鍵語句為:
predata.next = data.next;
delete data;// 刪除當前節點的空間
關於c++中的連結串列問題
5樓:月淵冥
c++中的連結串列相對之下更為複雜。因為它要確立物件,用class來建立連結串列,需要共有成員、私有成員,還有類獨特的封裝性。並不是說你懂得函式構建就能寫出來,c++的連結串列語法較之複雜,但可移植性非常好!
關於此點只有你學了才能體會出來。另外,資料結構是一種思想,你c的連結串列學會了,c++學的也快。總之c++和c的卻別很大,功能比c多,所以語法也有點複雜。
但有些時候用起來是很方便的。
6樓:惡靈的加護
差別不大,如果你把成員寫成public的話,把結構體指標換成物件的指標就行了。
但是類的功能可以更強大,你應該考慮在類中增加更多的成員函式。
或者你可以將連結串列的節點仍然用結構體寫,但是用乙個類來管理整個連結串列。
7樓:匿名使用者
連結串列是資料結構的概念。跟語言無關。
任何一種語言都可以實現連結串列。
1->2->3->4
至於你在1,2,3,4裡放的是int,double,還是乙個物件都無關緊要。c語言雖然沒有物件但有結構,大同小異。
8樓:孫策
c++和c語言中的連結串列是一樣的,c++是c語言的擴充套件,擴充套件的內容如下:
1、類(類的多型、封裝、繼承)
2、過載(過載是乙個很重要的概念,包括函式的過載和運算子的過載)3、一些小概念上的修改,new和delete運算子的增加const,等等.
4、c++是完全相容c的,也就是裡面有的概念,c++裡都用,並且都能用。
所以,像連結串列,結構體,共同體。這些都是不變的。
有本書叫c++primer plus是我認為最好的一本c/c++教材。建議好好看看。
9樓:廖北伯
// 最簡單的寫法是這樣, 類似c的做法:
#include
using namespace std;
class node ;
node* createsample()
void print(node* phead)cout << " ] ";
}void main()
----------------
// 稍加改良的寫法是這樣, 把list當成乙個類:
#include
using namespace std;
class node ;
class list ;
list* createsample()
void print(list* pl)
cout << " ] ";
}void main() ;
class list ;
list* list::createsample()void list::print(list* pl)cout << " ] ";
}void main()
--------------------
// 進一步的寫法是這樣, 把print寫成nonstatic:
#include
using namespace std;
class node ;
class list ;
list* list::createsample()void list::print()
cout << " ] ";
}void main()
-------------
還可以再新增 list的 constructor, destructor, assignment.
10樓:匿名使用者
定義乙個指向物件的指標,再定義乙個結構體,結構體成員為兩個指標,前者指向物件,後者指向下乙個結構體,或者你把類產生的物件放在靜態區,人工分配記憶體吧
11樓:匿名使用者
在類的私有或公共變數裡指定乙個類的指標,應該可以吧!
我也很少用c++
12樓:匿名使用者
。。c++ 提供了容器。。。很好用的!容器可以解決你的 這個問題!
13樓:匿名使用者
c++同樣能定義結構體,跟c中的是一樣的。
c++連結串列原理是什麼啊?
14樓:匿名使用者
簡單的說連結串列就是每個節點有乙個指標項,
它指向它的下乙個節點,這樣把所有的節點
都串起來了,看起來像乙個鏈。
15樓:
簡單說,鏈結就是乙個個結點串成乙個鏈。結點就是乙個結構體,裡面有乙個成員是乙個指標(位址),讓這個成員指向另乙個結構體的位址,連結串列最後乙個結點的位址指向null,表示連結串列的結束。
鏈結從形式上還是比較好理解的,只是程式設計實現有些複雜,很多c語言書上有非常形象的圖,你耐心看看,再寫幾個程式實驗下,就明白了。
16樓:匿名使用者
原理簡單地說就是有很多塊記憶體,存放一堆資料,用指標把他們連線起來,表示他們的順序。
至於你說的程式,你說的那本書不是每個人都看過的。所以,建議你把那段程式敲上來,或者簡單點,拍張**,傳上來,也好讓更多的人能更好的理解你到底問的是什麼程式。
17樓:
連結串列就是通過指標進行互相索引。
18樓:夫妻那些事兒
連結串列就是古人結繩計數類似的原理,乙個串乙個,也想糖葫蘆,從上往下吃,或者從下往上吃。
c++ 單向連結串列和雙向連結串列有什麼區別?各自有什麼優缺點?
19樓:匿名使用者
一、指代不同
1、雙向連結串列:也叫雙鏈表,是連結串列的一種,每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅
二、優點不同
1、雙向連結串列:從雙向連結串列中的任意乙個結點開始,都可以很方便地訪問前驅結點和後繼結點。
2、單向連結串列:單個結點建立非常方便,普通的線性記憶體通常在建立的時候就需要設定資料的大小,結點的訪問方便,可以通過迴圈或者遞迴的方法訪問到任意資料。
三、缺點不同
1、雙向連結串列:增加刪除節點複雜,需要多分配乙個指標儲存空間。
2、單向連結串列:結點的刪除非常方便,不需要像線性結構那樣移動剩下的資料,但是平均的訪問效率低於線性表。
攝影中的快門是什麼 和光圈有什麼關係
配合光圈的變化,可以調整快門的速度來實現正確 快門就是 時間的長短,比如你的光圈。底片或者ccd上,比如噴湧的瀑布,在陽光下凝結成晶瑩剔透的水珠。如果放慢快門速度,那麼,主體不。動是清晰的,背景的人群就會變成模糊的運動效果,畫面的生動性加強。光圈和快門的關係 當乙個景物的正確 確定以後,你可以變換不...
夢裡的時間快慢和現實中時間快慢有什麼關係
好像夢中的時間流逝速度是現實中時間流逝速度的4.5倍。我以前看過一篇文章,別人做過實驗的。沒有什麼關係,完全沒有。不過一般情況下夢境的時間比現實時間快,往往夢境中很久不過現實一瞬。事實上在現實中我們每分每秒接受的資訊量是很大的,而擬造夢境時只要有部分主要資訊即可,同樣的記憶空間,能承載的夢境時間遠長...
佛教與佛學有什麼關係,佛學和佛教什麼關係呢?
佛學就是佛教,佛教是指佛陀的教導,佛學就是把佛陀的教導形成體系,形成一種文化,就像孔子與論語一樣,阿彌陀佛,希望能幫到你 佛法學習 請聽淨空法師講的 認識佛教 了凡四訓 太上感應篇 地藏經 無量壽經 體方法師講的 解脫之道 阿含經 心經 金剛經 簡豐文居士講的 楞嚴經 圓覺經 楞伽經 六祖壇經 三祖...