存儲連續
① 計算機存儲數據是否是連續的
不一定是!要看情況!
如果存儲介質里是空的,計算機從頭開始存儲數據,那當然數據與數據之間是連續的。
但是,如果開頭或中間部分的數據被追加或修改,那麼新的數據將存儲在最後。
如果,在開頭或中間部分,刪除了數據,會留下空白,以後的數據不會將其添滿,只會存儲在最後。
留下的空白,就被稱之為磁碟碎片,所以,Windows系統的「開始」、「程序」、「附件」、「系統工具」里,都有一個「磁碟碎片整理程序」。碎片越多,系統運行越慢!
② 鏈表中每個節點所佔用的儲存空間是連續的,但節點之間在空間上可以連續也可以不連續 對這句話不是很明白
一個鏈表有很多個節點,各個節點之間通過指針連接起來,所以各個結點之間的位置可以不連續,也就是可以放在不同的位置,所以在空間上可以是不連續的;但對於一個節點,因為節點內部是一個整體,所以就要佔用連續的存儲空間。
隊列是先進先出的棧是先進後出的都是線性表線性表是最基礎、最常用的數據結構,線性表中數據元素都是一對一的對應關系。可以不連續,它的存儲空間分兩段,一段存放數據,另一段存放著地址,鏈表是通過地址將數據串聯起來的數組必須是連續的存儲空間。
(2)存儲連續擴展閱讀:
一個鏈表或者多個鏈表使用獨立的存儲空間,一般用數組或者類似結構實現,優點是可以自動獲得一個附加數據:唯一的編號,並且方便調試;缺點是不能動態的分配內存。當然,另外的在上面加一層塊狀鏈表用來分配內存也是可以的,這樣就解決了這個問題。
這種方法有時候被叫做數組模擬鏈表,但是事實上只是用表示在數組中的位置的下標索引代替了指向內存地址的指針,這種下標索引其實也是邏輯上的指針,整個結構還是鏈表,並不算是被模擬的(但是可以說成是用數組實現的鏈表)。
③ 線性表採用鏈式存儲時,結點的存儲地址是連續的嗎
用任意的一組存儲單元來存放線性表的結點,不同組的存儲單元既可以是連續的,也可以是不連續的。
線性表有順序表和鏈表兩種存儲結構。
順序表:線性表的結點按邏輯次序依次存放在一組地址連續的存儲單元里的方法。
鏈表:用一組任意的存儲單元來存放線性表的結點,這組存儲單元既可以是連續的,也可以是不連續的
(3)存儲連續擴展閱讀:
線性表分類:
我們說「線性」和「非線性」,只在邏輯層次上討論,而不考慮存儲層次,所以雙向鏈表和循環鏈表依舊是線性表。
在數據結構邏輯層次上細分,線性表可分為一般線性表和受限線性表。一般線性表也就是我們通常所說的「線性表」,可以自由的刪除或添加結點。受限線性表主要包括棧和隊列,受限表示對結點的操作受限制。
線性表優點:
線性表的邏輯結構簡單,便於實現和操作。因此,線性表這種數據結構在實際應用中是廣泛採用的一種數據結構。
參考資料:網路——線性表
④ 鏈式存儲設計結點內的存儲單元地址為什麼要連續
鏈式存儲設計時,各個不同結點的存儲空間可以不連續,但是結點內的存儲單元地址則必須連續。
typedef struct LNode {
int value; // value中存放結點值域,默認是int型
struct Lnode *next;//指向後繼結點的指針
}LNode; // 定義單鏈表結點類型
上述定義了一個結構體,包括兩部分,一是值域,二是指針域;每當定義一個結點都會產生這兩個區域。
這個value與next域必須是挨著的,稱這個結點為內部。
假如我們定義若干個不同的結點,把它們連接起來成為一個單鏈表。
value區域,箭頭區域則是指針域指向邏輯上相鏈接的下一個結點,但是它們在空間上不一定連續。
而對於它們的結點內部一定是連續的。若第一個結點佔用兩個地址,那麼value域的起始地址是1,則指針域的地址就是2。同理若第二個結點的value地址是10,則next域就是11。
因此,在進行鏈式存儲設計時,各個不同結點完全可以存儲在不連續的空間上,而對於同一個結點內部,不論劃分多少個區域,兩個也好,三個也罷,總之內部的單元存儲地址是連續的。
⑤ 存儲器管理的連續分配存儲管理方式有哪些
連續分配方式.它是指為了一個用戶程序分配一個連續的內存空間.可以分為單一連續分配、固定分區分配、動態分區分配以及動態重定位分區分配四種方式。不過今天我們講的是固定分區分配和動態分區分配。
固定分區分配是最簡單的一種可運行多道程序的存儲管理方式。 一、基本思想:在系統中把用戶區預先劃分成若干個固定分區(每個分區首地址固定,每個分區長度是固定),每個分區可供一個用戶程序獨占使用。注意:每個分區大小可以相同,也可以不相同。 二、主存分配與回收:藉助主存分配表。 三、地址轉換(靜態重定位):物理地址=分區起始地址+邏輯地址。其中劃分分區方法包括分區大小相等和分區大小不等。
動態分區分配是根據進程的實際需要,動態地為之分配內存空間。一、基本思想:按用戶程序需求動態劃分主存供用戶程序使用。(每個分區首地址是動態的,每個分區的長度也是動態的) 二、主存分配與回收-->(1)未分配表(登記未分配出去的分區情況);(2)已分配表(登記已經分配出去的分區情況)。 三、地址轉換:物理地址=分區起始地址+邏輯地址。 四、分區分配演算法:從空閑分區中選擇分區分www.hbbz08.com 配給用戶程序的策略。 (1)首次適應演算法(最先適應)順序查詢為分配表,從表中找出第一個可以滿足作業申請的分區劃分部分分配給用戶作業。 (2)循環首次適應演算法 (3)最佳適應演算法:從空閑分區中找出一個能滿足用戶作業申請的最小空閑分區劃分給用戶作業使用(有利於大作業執行) (4)最壞適應演算法:從空閑分區中挑最大的分區劃分給用戶程序使用(有利於中、小作業執行)
⑥ 一個文件在硬碟中的存儲是連續還是分離,如果分離,每斷的大小是相等還是不等,沒個文件的斷是相等的嗎
數據在硬碟中的存儲開始基本上都是連續的,隨著使用的增加,不斷的讀寫硬碟上數據就很分散了,也就是所謂的磁碟碎片,如果你整理過碎片就會看到。大小是不等的。文件一般不可能全部都寫入內存的,特別是大文件。
⑦ 連續存儲數據時,存儲單元的地址()A.一定連續 B一定不連續 C不一定連續 D部分連續
A。
鏈式存儲,存儲空間可以不連續,但存儲地址必連續。
鏈式存儲設計時,各個不同結點的存儲空間可以不連續,但是結點內的存儲單元地址則必須連續。
typedef struct LNode {
int value; // value中存放結點值域,默認是int型
struct Lnode *next;//指向後繼結點的指針
}LNode; // 定義單鏈表結點類型
上述定義了一個結構體,包括兩部分,一是值域,二是指針域;每當定義一個結點都會產生這兩個區域。
這個value與next域必須是挨著的,稱這個結點為內部。
(7)存儲連續擴展閱讀:
由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而順序表相應的時間復雜度分別是O(logn)和O(1)。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。
⑧ 循環鏈表的存儲空間是連續的,為什麼錯
循環鏈表是由單鏈表的最後一個結點指針不指向null,而是指向頭結點而成。因此我們分析單鏈表的存儲結構。
單鏈表是通過一組任意的存儲單元存儲線性表中的元素的。 這是單鏈表的定義。單鏈表的存儲單元是任意的!! 沒有說要連續。
連續的只有順序表!順序表!順序表!
順序表是用一組地址連續!!的存儲單元,依次!!存儲線性表中的數據元素。
而循環鏈表 它的定義前面已經說了,只是最後一個結點不為null(空),而是指向鏈表的頭結點哦。
循環鏈表也是鏈表,鏈表的存儲空間不一定連續的。
但是順序表是一定連續的存儲空間哦。