循環隊列本身是一種順序存儲結構,而循環列表是一種鏈式存儲結構。兩者之間是平級關系。
線性鏈表是線性表的鏈式存儲結構,包括單鏈表,雙鏈表,循環鏈表等。
隊列的順序存儲結構一般採用循環隊列的形式。
循環隊列的操作是按數組取摸運算的,所以是順序存儲,而循環鏈表本身就是收尾相連的,所以循環鏈表不是循環隊列,兩種不同的存儲結構,雖然實現的功能是一樣的,實現循環兩種方式 順序存儲就是循環隊列,鏈式存儲就是循環鏈表。
(1)雙鏈式存儲空間和單鏈式擴展閱讀:
1、比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。
2、邏輯上相鄰的節點物理上不必相鄰。
3、插入、刪除靈活 (不必移動節點,只要改變節點中的指針)。
4、查找節點時鏈式存儲要比順序存儲慢。
5、每個節點是由數據域和指針域組成。
6、由於簇是隨機分配的,這也使數據刪除後覆蓋幾率降低,恢復可能提高。
⑵ 棧往往用單鏈表實現,可以用雙鏈表嗎哪個更好
棧往往用單鏈表實現,可以用雙鏈表,雙鏈表更好。
最好是用數組,其次應該用雙鏈,因為它是雙向變化的。雙鏈表除了有一個指向下一結點的指針外,還有一個指向前一結點的指針,可以通過prev()快速找到前一結點,顧名思義,單鏈表只能單向讀取。
介紹
棧是只能在某一端插入和刪除的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底(push),最後的數據在棧頂(top),需要讀數據的時候從棧頂開始彈出數據(top)最後一個數據被第一個讀出來。鏈式棧中的元素以Node的形式存儲,節點Node中存有此節點存於棧中的元素以及指向下個節點的指針。鏈式棧的數據成員只用保存指向棧頂節點的指針 *top_node。
⑶ c語言鏈表問題
鏈式存儲結構就是鏈表。
單鏈表是只有一個方向的鏈式存儲結構。
單鏈表實現棧的意思就是用單向鏈式存儲結構實現棧,但是注意,頭結點作為棧頂,這樣出棧入棧操作的時間復雜度是O(1),如果頭結點作為棧底則需要遍歷整個鏈表。
鏈式存儲結構有很多種,單鏈表、雙鏈表、十字鏈表等,一般用到的確實就只有兩種,就是單和雙,但是細分又可分為帶或不帶頭結點,是否是循環鏈表等。
棧和隊列是受限的線性表,有其特殊用途,隨著學習的深入你就知道了,比方說計算表達式,就用到了棧(操作符棧和操作數棧),避免了很多誤操作,直接用鏈表當然也可以,但是不保險,可能會誤操作或被別有用心的人利用。
⑷ 線性表兩種 存儲結構各自的優缺點有哪些
線性表的鏈式存儲結構:
優點:
插入和刪除不需要移動插入時只需要對插入位置後的一個元素進行操作,不需要大量的移動元素。空間有效利用高。
缺點:
大量訪問操作時不如順序存儲結構,因為每次都需要從頭開始遍歷整個線性表直到找到相應的元素為止。
線性表的順序存儲結構:
優點:
可隨機存取表中任一元素。因為有下標可以操作可以快速的定位到指定位置的元素,但是不知道位置的話也需要順序遍歷。
缺點:
插入或刪除操作時,需大量移動元素。合適在很少進行插入和刪除運算的情況下。
(4)雙鏈式存儲空間和單鏈式擴展閱讀:
線性表的特徵
集合中必存在唯一的一個「第一元素」。
集合中必存在唯一的一個 「最後元素」 。
除最後一個元素之外,均有唯一的後繼(後件)。
除第一個元素之外,均有唯一的前驅(前件)。
線性表的基本操作
MakeEmpty(L) 這是一個將L變為空表的方法。
Length(L) 返回表L的長度,即表中元素個數。
Get(L,i) 這是一個函數,函數值為L中位置i處的元素(1≤i≤n)。
Prior(L,i) 取i的前驅元素。
Next(L,i) 取i的後繼元素。
Locate(L,x) 這是一個函數,函數值為元素x在L中的位置。
Insert(L,i,x)在表L的位置i處插入元素x,將原占據位置i的元素及後面的元素都向後推一個位置。
Delete(L,p) 從表L中刪除位置p處的元素。
IsEmpty(L) 如果表L為空表(長度為0)則返回true,否則返回false。
Clear(L)清除所有元素。
Init(L)同第一個,初始化線性表為空。
Traverse(L)遍歷輸出所有元素。
Find(L,x)查找並返回元素。
Update(L,x)修改元素。
Sort(L)對所有元素重新按給定的條件排序。
strstr(string1,string2)用於字元數組的求string1中出現string2的首地址。
參考資料來源:網路-線性表
⑸ 文件系統
文件系統的目的就是通過目錄查找文件,尋找空閑位置存放文件。
組成:超級塊、目錄結構、描述文件屬性的結構,文件系統相關操作
sysfs:超級塊,目錄sys_dirent,,屬性kset、kobject
vfs:超級塊,目錄dentry,屬性inode
bdevfs:超級塊,目錄dentry,屬性bdevfs_inode(嵌在block_device中)
超級塊、空閑表、目錄文件(文件控制塊FCB)、普通文件、與文件系統有關的操作(查找、讀寫等)
超級塊——文件系統中第一個塊被稱為超級塊。描述文件系統塊大小、空閑表相關的屬性(比如地址、每一項大小等)、根目錄地址
空閑表——磁碟上空閑磁碟塊
目錄文件——存放文件名、文件屬性、文件地址等信息
把目錄文件拆分為兩部分:與文件查找有關的部分(文件名、文件類型)、文件屬性部分(inode、FAT)
順序存儲——把文件存放在連續的扇區上
鏈式存儲——把文件存放在不連續的文件塊上,每個文件快的結束端有存放有下一個文件塊的地址
索引存儲——把存放文件的所有塊號集中放在一個索引結構上
優劣:順序存儲,讀取速度更快,但容易浪費大量磁碟存儲空間;鏈式存儲,可以充分利用內存空間,但是不能隨機訪問文件內的任意部分,訪問速度慢;索引存儲,可以隨機訪問文件的任意部分,可以看作鏈式存儲的優化方案。
linux磁碟文件系統採用ext2
組織方式:超級塊、空閑塊點陣圖、只有目錄名的目錄文件、inode點陣圖、inode(含文件屬性、文件磁碟地址)、索引存儲方式、ext_fIle_operations表、ext_file_inode_operations表
文件存儲方式:索引存儲。
硬鏈接目錄共享一個inode。由於硬鏈接是直接將文件名與索引節點號(即inode號)鏈接,因此硬鏈接存在以下幾個特點: 1、文件有相同的inode號及data block,這使得修改其中一個硬鏈接文件屬性或文件數據時,其他硬鏈接文件都會發生相應修改;2、只能對已存在的文件進行創建;3、不能跨文件系統(即分區)進行創建;4、不能對目錄文件進行創建;5、刪除其中一個硬鏈接文件時,不會對其他硬鏈接文件產生影響。
軟鏈接則是一個文件,文件內存儲有目標文件的路徑。創建軟鏈接時,目標文件inode中的鏈接計數 i_nlink 不會增加。由於軟鏈接有著自己的索引節點號(即inode號)以及用戶數據塊(data block),因此沒有硬鏈接的諸多限制,它的特性如下:1、軟鏈接有自己的文件屬性、inode號和data block,但是編輯文件其實就是編輯源文件;2、可以對不存在的文件或目錄進行創建;3、可以跨文件系統(即分區)進行創建,使用ln命令跨文件系統創建時,源文件必須是絕對路徑,否則為死鏈接;4、可以對文件或目錄文件進行創建;5、刪除軟鏈接並不影響源文件,但源文件被刪除,則相關軟鏈接文件變為死鏈接(dangling link),若源文件(原地址原文件名)重新被創建,則死鏈接恢復為正常軟鏈接。
目的:封裝好不同文件系統,向上提供統一的介面
組成:超級塊superblock、目錄項dentry、文件屬性inode;文件系統類型file_system_type、描述文件系統安裝在哪個父文件系統下vfsmount
如圖在vfs中安裝ext2和fat文件系統:即置i_ops、i_fops、d_ops為各個文件系統獨有的操作,超級塊中的s_fs_info指向具體文件系統的超級塊;vfsmount中描述有文件系統的安裝點。
先把安裝點記錄在vfsmount中。根據file_system_type中的讀超級塊方法,讀取super_block,再根據super_block中的構造inode方法,構造一inode並初始化;然後根據inode->i_ops構造dentry
⑹ c++ 單向鏈表和雙向鏈表有什麼區別各自有什麼優缺點
一、指代不同
1、雙向鏈表:也叫雙鏈表,是鏈表的一種,每個數據結點中都有兩個指針,分別指向直接後繼和直接前驅
2、單向鏈表:是鏈表的一種,其特點是鏈表的鏈接方向是單向的,對鏈表的訪問要通過順序讀取從頭部開始。
二、優點不同
1、雙向鏈表:從雙向鏈表中的任意一個結點開始,都可以很方便地訪問前驅結點和後繼結點。
2、單向鏈表:單個結點創建非常方便,普通的線性內存通常在創建的時候就需要設定數據的大小,結點的訪問方便,可以通過循環或者遞歸的方法訪問到任意數據。
三、缺點不同
1、雙向鏈表:增加刪除節點復雜,需要多分配一個指針存儲空間。
2、單向鏈表:結點的刪除非常方便,不需要像線性結構那樣移動剩下的數據,但是平均的訪問效率低於線性表。
⑺ 數據結構的存儲方式有哪幾種
數據結構的存儲方式有順序存儲方法、鏈接存儲方法、索引存儲方法和散列存儲方法這四種。
1、順序存儲方式:順序存儲方式就是在一塊連續的存儲區域一個接著一個的存放數據,把邏輯上相連的結點存儲在物理位置上相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接掛安息來體現。順序存儲方式也稱為順序存儲結構,一般採用數組或者結構數組來描述。
2、鏈接存儲方法:它比較靈活,其不要求邏輯上相鄰的結點在物理位置上相鄰,結點間的邏輯關系由附加的引用欄位表示。一個結點的引用欄位往往指導下一個結點的存放位置。鏈接存儲方式也稱為鏈接式存儲結構,一般在原數據項中增加應用類型來表示結點之間的位置關系。
3、索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。它細分為兩類:稠密索引:每個結點在索引表中都有一個索引項,索引項的地址指示結點所在的的存儲位置;稀疏索引:一組結點在索引表中只對應一個索引項,索引項的地址指示一組結點的起始存儲位置。
4、散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。
(7)雙鏈式存儲空間和單鏈式擴展閱讀
順序存儲和鏈接存儲的基本原理
在順序存儲中,每個存儲空間含有所存元素本身的信息,元素之間的邏輯關系是通過數組下標位置簡單計算出來的線性表的順序存儲,若一個元素存儲在對應數組中的下標位置為i,則它的前驅元素在對應數組中的下標位置為i-1,它的後繼元素在對應數組中的下標位置為i+1。
在鏈式存儲結構中,存儲結點不僅含有所存元素本身的信息,還含有元素之間邏輯關系的信息。數據的鏈式存儲結構可用鏈接表來表示。其中data表示值域,用來存儲節點的數值部分。Pl,p2,…,Pill(1n≥1)均為指針域,每個指針域為其對應的後繼元素或前驅元素所在結點的存儲位置。
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。