1樓:匿名使用者
連結串列一般用結構體表示 如。
typedef struct stu
int sno;
char sname[20];
struct stu *next;
stu1,stu2;
對兩個學生初始化後 進行乙個簡單的連結串列鏈結。
stu1->next = stu2;
stu2->next = null;
student1的下乙個就是student2了。
而你說的陣列 int a[10];
而連結串列在記憶體分配上也有順序的 也有用指標連起來的(比如用堆分配空間後用連結串列鏈結起來)
這跟你採用什麼方式來分配結構體的空間有關係。
如果用靜態分配記憶體 也就是分配在棧中 順序寫下來。
即用stu1->next 就可以找到stu2
但如用動態分配記憶體罩賀陪struct stu *stu3 = struct stu*)malloc(sizeof(struct stu));這樣分配的話。
它就被分配到了堆中 但stu3本身的位址還是保物蠢存在棧中的 只是stu3的內容表示的拍辯是堆中的位址。
棧和堆的位址相隔很遠。
有興趣可以去我空間看看 裡面有一些很好的帖子 看了你就全懂了。
陣列和連結串列的區別,各有何優缺點
2樓:阿木趣談社會趣事
1、元素個數不同陣列的元素個數是固定的,而連結串列。
的結點個數可按需要增減。
2、儲存單元不同陣列元素的儲存單元在定義時分配,連結串列節點的儲存單元謹攜在執行時動態向系統申請。
3、優點不同陣列的優點:隨機訪問性強;查詢速磨團度快。
連結串列的優點:插入刪除速度快;記憶體利用率高,不會浪費記憶體;大小沒有固定,拓展很靈活。
4、缺點不同連結串列的缺點:瞎晌橘不能隨機查詢,必須從第乙個開始遍歷,查詢效率低。
資料的缺點:插入和刪除效率低;可能會浪費空間;記憶體空間要求高,必須有足夠的連續記憶體空間;陣列大小固定,不能動態拓展。
連結串列和陣列的區別是什麼?
3樓:小楓帶你看生活
1、記憶體不同陣列靜態分配記憶體,連結串列動態分配記憶體。
2、連續情況不同陣列在內宴裂態存中連續,連結串列不連續。
3、元素位置不同陣列元素在棧區,連結串列元素在堆區。
4、複雜度不同陣列利用下標定位,時間複雜度為晌源o(1),連結串列定位元素時間複雜度o(n);陣列插入或刪源搭除元素的時間複雜度o(n),連結串列的時間複雜度o(1)。
陣列和連結串列的優缺點
4樓:匿名使用者
陣列。一、陣列的特點。
1.在記憶體中,陣列是一塊連續的區域。
2.陣列需要預留空間。
在使用前需要提前申請所佔記憶體的大小,這樣不知道需要多大的空間,就預先申請可能會浪費記憶體空間,即咐滲陣列空間利用率低。
ps:陣列的空間在編譯階段就需要進行確定,所以需要提前給出陣列空間的大小(在執行階段是不允許改變的)
3.在陣列起始位置處,插入資料和刪除資料效率低。
插入資料時,待插入位置的的元素和它後面的所有元素都需要向後搬移。
刪除資料時,待刪除位置後面的所有元素都需要向前搬移。
4.隨機訪問效率很高,時間複雜度可以達到o(1)
因為陣列的記憶體是連續的,想要訪問那個元素,直接從陣列的首位址處向後偏移就可以訪問到了。
5.陣列開闢的空間,在不夠使用的時候需要擴容,擴容的話,就會涉及到需要把舊陣列中的所有元素向新陣列中搬移。
6.陣列的空間衡猜脊是從棧分配的。
二、陣列的優點。
隨機訪問性強,查詢速度快,時間複雜度為o(1)
三、陣列的缺點。
1.頭插和頭刪的效率低,時間複雜度為o(n)
2.空間利用率不高。
3.記憶體空間要求高,必須有足夠的連續的記憶體空間。
4.陣列空間的大小固定,不能動態拓展。
連結串列。一、連結串列的特點。
1.在記憶體中,元素的空間可以在任意地方,空間是分散的,不需要連續。
3.查詢資料時效率低,時間複雜度為o(n)
因為連結串列的空間是分散的,所以不具有隨機訪問性,如要需要訪問某個位置的資料,需要從第乙個資料開始找起,依次往後遍歷,直到找到待查詢的位置,故可能在查詢某個元素兆侍時,時間複雜度達到o(n)
4.空間不需要提前指定大小,是動態申請的,根據需求動態的申請和刪除記憶體空間,擴充套件方便,故空間的利用率較高。
5.任意位置插入元素和刪除元素效率較高,時間複雜度為o(1)
6.連結串列的空間是從堆中分配的。
二、連結串列的優點。
1.任意位置插入元素和刪除元素的速度快,時間複雜度為o(1)
2.記憶體利用率高,不會浪費記憶體。
3.連結串列的空間大小不固定,可以動態拓展。
三、連結串列的缺點。
隨機訪問效率低,時間複雜度為0(n)
陣列和連結串列操作空間複雜度**對比圖。
綜上:對於想要快速訪問資料,不經常有插入和刪除元素的時候,選擇陣列。
對於需要經常的插入和刪除元素,而對訪問元素時的效率沒有很高要求的話,選擇連結串列。
陣列和連結串列的優缺點
5樓:科創
1)在記憶體中,陣列是一塊連續的區域。
2)陣列需要預留空間,在使用前要先申請佔記憶體的大小,可能會浪費記憶體空間。
3)插入資料和刪除資料效率低,插入資料時,這個位置後面的資料在記憶體中都要向後移。
4)隨機讀取效率很高。因為陣列是禪正連續的,知道每攔歷乙個資料的記憶體地簡襲搜址,可以直接找到給位址的資料。
5)並且不利於擴充套件,陣列定義的空間不夠時要重新定義陣列。
1)在記憶體中可以存在任何地方,不要求連續。
2)每乙個資料都儲存了下乙個資料的記憶體位址,通過這個位址找到下乙個資料。 第乙個人知道第二個人的座位號,第二個人知道第三個人的座位號……
3)增加資料和刪除資料很容易。 再來個人可以隨便坐,比如來了個人要做到第三個位置,那他只需要把自己的位置告訴第二個人,然後問第二個人拿到原來第三個人的位置就行了。其他人都不用動。
4)查詢資料時效率低,因為不具有隨機訪問性,所以訪問某個位置的資料都要從第乙個資料開始訪問,然後根據第乙個資料儲存的下乙個資料的位址找到第二個資料,以此類推。 要找到第三個人,必須從第乙個人開始問起。
5)不指定大小,擴充套件方便。連結串列大小不用定義,資料隨意增刪。
1)隨機訪問性強。
2)查詢速度快。
1)插入和刪除效率低。
2)可能浪費記憶體。
3)記憶體空間要求高,必須有足夠的連續記憶體空間。
4)陣列大小固定,不能動態拓展。
1)插入刪除速度快。
2)記憶體利用率高,不會浪費記憶體。
3)大小沒有固定,拓展很靈活。
不能隨機查詢,必須從第乙個開始遍歷,查詢效率低。
連結串列和陣列的優缺點
6樓:戶如樂
連結串列和陣列作為演算法中的兩個基本資料結構,在程式設計過程中經常用到。儘管兩種結構都可以用來儲存一系列的資料,但又各有各的特點。
陣列的優勢,在於可以方便的遍歷查詢需要的資料。在查詢陣列指定位置(如查詢陣列中的第4個資料)的操作中,只需要進行1次操作即可,時間複雜度為o(1)。但是,這種時間上的便利性,是因為陣列在記憶體中佔用了連續的空間,在進行類似的查詢或者遍歷時,本質是指標在記憶體中的定向偏移。
然而,當需要對陣列成員進行新增和刪除的操作時,陣列內完成這類操並緩寬作的時間複雜度則變成了o(n)。
連結串列的特性,使其在某些操作上比陣列更加高效。例如當進行插入和刪除操作時,連結串列操作的時間複雜度僅為o(1)。另外,因為連結串列在記憶體中不是連續儲存的,所以可以充分利用記憶體中的碎片空間。
除絕亮此之外,連結串列還是很多演算法的基礎,最常見的雜湊表哪亮就是基於連結串列來實現的。基於以上原因,我們可以看到,連結串列在程式設計過程中是非常重要的。本文總結了我們在學習連結串列的過程中碰到的問題和體會。
陣列,記錄,連結串列的區別
7樓:哈哈呵呵你好
連結串列是鏈式的儲存結構;陣列是順序的儲存結構。連結串列通過指標來連線元素與元素,陣列則是把所有元素按次序依次儲存。
連結串列的插入刪除元素相對陣列較為簡單,不需要移動元素,且較為容易實現長度擴充,但是尋找某個元素較為困難;
陣列尋找某個元素較為簡單,但插入與刪除比較複雜,由於最大長度需要再程式設計一開始時指定,故當達到最大長度時,擴充長度不如連結串列方便。相同:兩種結構均可實現資料的順序儲存,構造出來的模型呈線性結構。
高分求陣列模擬實現連結串列
樓主,你好,我是學c的,pascal的程式我是不能給你了!但是要說下陣列相比連結串列的好處還是可以說說的 首先,連結串列和陣列在屋裡儲存上就會有所不同,連結串列可以存在連續的實體地址上,也可以存在不連續的地址上,需要程式設計師自己開發地址,而陣列就不同了,只要定義了,編譯器就會自動的給你把空間開發出...
連結串列中whilep是不是等於whilep!NULL
絕對是的bai。當你把一個指 du針變數賦值為空的時候.他的zhi地址值dao就為 ox000000 這個就相版當於0 其實這樣的還權有 0 當你把一個字元賦值給 0 後,因為 0 的asin碼為0所以也可以達到判斷的效果.所以總結說,null,0 0都是為假.不是的 while p p是一個boo...
c 中的char符陣列是不是就是等同於所謂的c字串
字串由字元組成,最後1位為 0 字元陣列是儲存字元的陣列,但最後1位不一定是 0 char 既不是c的字元陣列,也不是c的字串,而是c的字元型指標!指標與陣列,操作起來常常有相似之處,就有不少人認為陣列與指標有什麼必然的聯絡。實際上它們並不相干,指標就是指標,陣列就是陣列。理論上來說一個char字元...