vertica 表空間擴容 順序表的實現

2021-10-18 17:01:46 字數 3014 閱讀 8584

資料結構不僅僅指的資料值在邏輯上的結構,更有在儲存空間上的位置結構,順序表,故名思意是有一定順序的資料結構。

順序表最基本模型如圖:

對於基本布局順序表而言,它儲存相同單元大小並且在記憶體位址上連續的資料,邏輯位址是其元素的邏輯順序,實體地址第乙個元素的記憶體位址加上離第乙個元素的距離,如:e1實體地址是l0,那麼e2的實體地址是e1的位址加上e1所占用的大小c,以此類推,en的實體地址是l0+(n-1)*c。

這種基本布局出現了乙個問題,如果其中的元素大小不統一,那麼豈不是要用最大儲存單元作為基本單位,非常浪費空間,因此出現了外接順序表,它是將元素的索引以相同單元大小連續存放,索引記錄對應資料在記憶體上的位址,那麼我們可以通過基本布局的方式去找到索引,再根據索引找到資料。

在熟悉了順序表的基本模型後,我們再看順表的結構,如圖所示:

實際的順序表包含兩部分,一部分是順序表的記錄資訊塊(含順序表容量、元素個數),一部分是資料塊,這兩部放在一起是一體式結構,如果分離通過索引連線是分離式結構。

順序表含有容量和容量的使用情況資訊,那麼很容易就實現擴容,其擴容方式有兩種:一種是頻繁的固定擴容,即每次增加固定單位的容量,因此會平凡擴容;另一種是倍增的擴容,即按照2、4、8、16這種方式來擴,這樣擴容頻率低,但可能造成浪費。

在python中list和tuple都是順序表結構,list是動態順序表,支援內部結構變化如增加或者減少元素,而tupele並不支援結構的改變,其他效能和list一致。

這便是資料結構的意義,它對python效能的提公升有指導性的作用。

對於順序表的實現,源**如下:

#python順序表的實現

class mylist():

def __init__(self,size=50): #初始化線性表

#定義線性表的最大長度為50

self.max = size

self.num = 0 #定義線性表的下表

self.data = [none] * self.max

def is_empty(self): #判斷線性表是否為0

return self.num == 0

def is_full(self): #判斷線性表是否為滿

return self.num == self.max

def __getitem__(self,index): #獲取線性表中某一位置的值

if not isinstance(index,int):

raise typeerror

if 0 <= index < self.max:

return self.data[index]

else:

raise indexerror

def __setitem__(self,index,value): #修改線性表中某一位置的值

if not isinstance(index,int):

raise typeerror

if 0 <= index < self.max:

self.data[index] = value

else:

raise indexerror

def locate_item(self,value): #按值查詢第乙個等於該值的索引

for i in range(self.num):

if self.data[i] == value:

return i

return -1

def count(self):

return self.num

if self.num > self.max:

print('list is full')

else:

self.data[self.num] = value

self.num += 1

if self.num >= self.max:

print('list is full')

if not isinstance(index,int):

raise typeerror

if index < 0 or index > self.num:

raise indexerror

for i in range(self.num,index,-1):

self.data[i] = self.data[i-1]

self.data[index] = value

self.num += 1

def remove(self,index): #刪除表中某一位置的值

if not isinstance(index,int):

raise typeerror

if index < 0 or index > self.num:

raise indexerror

for i in range(index,self.num):

self.data[i] = self.data[i+1]

self.num -= 1

def destroy(self): #銷毀線性表

self.__init__()

由於在此個月中,會寫很多類似的資料結構,因此我們將他們放在同乙個資料夾下,具體的檔案組織如下圖:

這樣,我們在main函式中通過匯入相應的所寫的模組,就能正常執行了。

oracle表空間擴容

1 查詢當前表空間使用情況 col file name format a50 col space name format a15 select b.file name file name,b.tablespace name space name,b.bytes 1024 1024 munm,b.by...

Oracle 表空間擴容

查詢表空間的磁碟路徑sql select from dba data files 查詢表空間的大小sql m單位 select t.tablespace name,round sum bytes 1024 1024 0 ts size from dba tablespaces t,dba data ...

Oracle表空間擴容

oracle表空間擴容 首先檢視表空間所生的記憶體 select a.tablespace name,round a.total size total size mb round a.total size round b.free size,3 used size mb round b.free s...