算法—顺序表(二)
一、順序表的結(jié)構(gòu)
表頭:存儲(chǔ)順序表的信息
包括數(shù)據(jù)區(qū)的容量和當(dāng)前表中已有的元素個(gè)數(shù)
數(shù)據(jù)區(qū):存放表中元素?cái)?shù)據(jù)
我們在創(chuàng)建一個(gè)數(shù)據(jù)表的時(shí)候先明確要存儲(chǔ)多少的數(shù)據(jù),順序表數(shù)據(jù)要求連續(xù)的存儲(chǔ)在內(nèi)存空間中,所以先向計(jì)算機(jī)內(nèi)存中申請連續(xù)的內(nèi)存空間,而并不是用一個(gè)再取申請一個(gè),所以要先預(yù)估容量是多少
如果用一個(gè)取申請一個(gè)內(nèi)控地址,內(nèi)存地址不會(huì)連續(xù),可能有其他的程序在計(jì)算機(jī)中申請了內(nèi)存地址
二、順序表分類
一體式順序表:表頭與數(shù)據(jù)區(qū)存放在一起
如圖為:內(nèi)存容量為為4,元素個(gè)數(shù)為3,存儲(chǔ)的數(shù)據(jù)為12,34,56,3個(gè)數(shù)據(jù)
分離式順序表:表頭與數(shù)據(jù)區(qū)分開存儲(chǔ)
如圖:內(nèi)存容量為4,元素個(gè)數(shù)為3,存儲(chǔ)的數(shù)據(jù)是12,34,56三個(gè)數(shù)據(jù)
三、順序表擴(kuò)充
擴(kuò)充需要申請一塊更大的數(shù)據(jù)區(qū)
一體式順序表:表頭和數(shù)據(jù)區(qū)存儲(chǔ)在一起,擴(kuò)容時(shí)表頭也要跟著變化
分離式順序表:表頭和數(shù)據(jù)區(qū)分開存儲(chǔ),擴(kuò)容時(shí)表頭不足要變化
四、一體式順序表和分離式數(shù)據(jù)表的區(qū)別
1、查詢數(shù)據(jù)
a=[12,34,56]
通過第一個(gè)地址,根據(jù)公式可以得到其他數(shù)據(jù)所在的地址
分離式數(shù)據(jù)表:根據(jù)表頭內(nèi)存地址先要拿到數(shù)據(jù)區(qū)的內(nèi)存地址(第一個(gè)數(shù)據(jù)所在的內(nèi)存地址),再根據(jù)第一個(gè)地址去拿其他數(shù)據(jù)的地址
2:擴(kuò)容
例如:要在列表中新增2個(gè)數(shù)據(jù)78,90
a=[12,34,56,78,90]
原內(nèi)存空間不夠,需要申請內(nèi)存空間
一體式數(shù)據(jù)表表頭需要改變
分離式數(shù)據(jù)表表頭不改變
總結(jié)
- 上一篇: 算法—顺序表之列表的扩容机制(pytho
- 下一篇: 栈——用顺序表实现栈操作