成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

php數(shù)據(jù)結(jié)構(gòu)詳解 php基本數(shù)據(jù)結(jié)構(gòu)及算法

PHP 數(shù)據(jù)結(jié)構(gòu)隊(duì)列(SplQueue)和優(yōu)先隊(duì)列(SplPriorityQueue)簡(jiǎn)單使用實(shí)例

隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)更簡(jiǎn)單,就像我們生活中排隊(duì)一樣,它的特性是先進(jìn)先出(FIFO)。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比涿州網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式涿州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋涿州地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

PHP

SPL中SplQueue類就是實(shí)現(xiàn)隊(duì)列操作,和棧一樣,它也可以繼承雙鏈表(SplDoublyLinkedList)輕松實(shí)現(xiàn)。

SplQueue類摘要如下:

SplQueue簡(jiǎn)單使用如下:

復(fù)制代碼

代碼如下:

$queue

=

new

SplQueue();

/**

*

可見隊(duì)列和雙鏈表的區(qū)別就是IteratorMode改變了而已,棧的IteratorMode只能為:

*

(1)SplDoublyLinkedList::IT_MODE_FIFO

|

SplDoublyLinkedList::IT_MODE_KEEP

(默認(rèn)值,迭代后數(shù)據(jù)保存)

*

(2)SplDoublyLinkedList::IT_MODE_FIFO

|

SplDoublyLinkedList::IT_MODE_DELETE

(迭代后數(shù)據(jù)刪除)

*/

$queue-setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO

|

SplDoublyLinkedList::IT_MODE_DELETE);

//SplQueue::enqueue()其實(shí)就是

SplDoublyLinkedList::push()

$queue-enqueue('a');

$queue-enqueue('b');

$queue-enqueue('c');

//SplQueue::dequeue()其實(shí)就是

SplDoublyLinkedList::shift()

print_r($queue-dequeue());

foreach($queue

as

$item)

{

echo

$item

.

PHP_EOL;

}

print_r($queue);

而優(yōu)先隊(duì)列SplPriorityQueue是基于堆(后文介紹)實(shí)現(xiàn)的。

SplPriorityQueue的類摘要如下:

SplPriorityQueue簡(jiǎn)單使用:

$pq

=

new

SplPriorityQueue();

$pq-insert('a',

10);

$pq-insert('b',

1);

$pq-insert('c',

8);

echo

$pq-count()

.PHP_EOL;

//3

echo

$pq-current()

.

PHP_EOL;

//a

/**

*

設(shè)置元素出隊(duì)模式

*

SplPriorityQueue::EXTR_DATA

僅提取值

*

SplPriorityQueue::EXTR_PRIORITY

僅提取優(yōu)先級(jí)

*

SplPriorityQueue::EXTR_BOTH

提取數(shù)組包含值和優(yōu)先級(jí)

*/

$pq-setExtractFlags(SplPriorityQueue::EXTR_DATA);

while($pq-valid())

{

print_r($pq-current());

//a

c

b

$pq-next();

}

簡(jiǎn)述php的特點(diǎn)及作用

PHP是一種服務(wù)器端、跨平臺(tái)、html嵌入式的腳本語(yǔ)言。

執(zhí)行速度快:PHP是一種強(qiáng)大的CGI腳本語(yǔ)言,語(yǔ)法混合了C、Java、Perl和PHP式的新語(yǔ)法,執(zhí)行網(wǎng)頁(yè)比CGI、Perl和ASP更快,這是它的第一個(gè)突出的特點(diǎn)。

擴(kuò)展資料:

PHP是目前最流行的編程語(yǔ)言,這毋庸置疑。它驅(qū)動(dòng)全球超過(guò)2億多個(gè)網(wǎng)站,有全球超過(guò)81.7%的公共網(wǎng)站在服務(wù)器端采用PHP。PHP常用的數(shù)據(jù)結(jié)構(gòu)都內(nèi)置了,使用起來(lái)方便簡(jiǎn)單,也一點(diǎn)都不復(fù)雜,表達(dá)能力相當(dāng)靈活。

在服務(wù)器端的網(wǎng)站編程中PHP會(huì)更容易幫助你找到工作。很多互聯(lián)網(wǎng)相關(guān)企業(yè)都在使用PHP開發(fā)框架,所以可以說(shuō)市場(chǎng)對(duì)PHP的開發(fā)程序員的需求還是比較大的。

參考資料來(lái)源:百度百科-PHP (超文本預(yù)處理器)

深入PHP中的HashTable結(jié)構(gòu)詳解

深入PHP中的HashTable結(jié)構(gòu)詳解

深入PHP中的HashTable結(jié)構(gòu)詳解

對(duì)php內(nèi)核有一定了解的人應(yīng)該都知道php的精髓就是HashTable,HashTable在php的實(shí)現(xiàn)中無(wú)處不在。包括php的數(shù)組、什么全局變量、局部變量的作用域等等,php的hashtable拆開來(lái)說(shuō)就是四部分:

hash函數(shù):用的是time33的散列函數(shù),將一個(gè)字符串的key轉(zhuǎn)換成一個(gè)數(shù)字

一個(gè)C數(shù)組:用來(lái)儲(chǔ)存桶(buckets)的

兩個(gè)雙向的鏈表:第一個(gè)雙向鏈表是數(shù)組的每個(gè)元素(桶bucket)是一個(gè)雙向鏈表,這樣做是為了解決hash沖突;第二個(gè)雙向鏈表是數(shù)組將每一個(gè)桶(bucket)連接起來(lái),這里要連接的也就是第一個(gè)雙向鏈表的鏈表頭,這樣做是為了遍歷整個(gè)hash表用的,鳥哥有篇blog是講php的foreach的,這里這樣設(shè)計(jì)就是給foreach用的==《深入理解PHP之?dāng)?shù)組(遍歷順序)》

我這里不再說(shuō)hashtable的struct和bucket的`struct了,因?yàn)橄旅娴耐扑]鏈接幾乎都講了,我不覺得我能描述和說(shuō)的比他們好,每個(gè)人的水平不一樣,我就以我現(xiàn)在的技術(shù)水平來(lái)描述,所以我就只把我整理的一些東西記錄一下

下面是php中hash實(shí)現(xiàn)的兩個(gè)文件:zend_hash.c zend_hash.h。這兩個(gè)文件里面實(shí)現(xiàn)了一堆的api,也引申出了一堆的api,下面是實(shí)現(xiàn)出來(lái)的api的原型

復(fù)制代碼 代碼如下:

ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength)

ZEND_API ulong zend_get_hash_value(const char *arKey, uint nKeyLength)

ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)

ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection)

ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int _zend_hash_index_update_or_next_(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int zend_hash_rehash(HashTable *ht)

static int zend_hash_do_resize(HashTable *ht)

ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, int flag)

ZEND_API void zend_hash_destroy(HashTable *ht)

ZEND_API void zend_hash_clean(HashTable *ht)

static Bucket *zend_hash_apply_r(HashTable *ht, Bucket *p)

ZEND_API void zend_hash_graceful_destroy(HashTable *ht)

ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht)

ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)

ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC)

ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func_args_t apply_func, int num_args, …)

ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)

ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size)

ZEND_API void _zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite ZEND_FILE_LINE_DC)

static zend_bool zend_hash_replace_checker_wrapper(HashTable *target, void *source_data, Bucket *p, void *pParam, merge_checker_func_t merge_checker_func)

ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, uint size, merge_checker_func_t pMergeSource, void *pParam)

ZEND_API int zend_hash_find(const HashTable *ht, const char *arKey, uint nKeyLength, void **pData)

ZEND_API int zend_hash_quick_find(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void **pData)

ZEND_API int zend_hash_exists(const HashTable *ht, const char *arKey, uint nKeyLength)

ZEND_API int zend_hash_quick_exists(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h)

ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData)

ZEND_API int zend_hash_index_exists(const HashTable *ht, ulong h)

ZEND_API int zend_hash_num_elements(const HashTable *ht)

ZEND_API int zend_hash_get_pointer(const HashTable *ht, HashPointer *ptr)

ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr)

ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)

ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_get_current_key_ex(const HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos)

ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos)

ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const char *str_index, uint str_length, ulong num_index, int mode, HashPosition *pos)

ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compar, int renumber TSRMLS_DC)

ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC)

ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC)

ZEND_API ulong zend_hash_next_free_element(const HashTable *ht)

void zend_hash_display_pListTail(const HashTable *ht)

void zend_hash_display(const HashTable *ht)

;

當(dāng)前題目:php數(shù)據(jù)結(jié)構(gòu)詳解 php基本數(shù)據(jù)結(jié)構(gòu)及算法
瀏覽路徑:http://jinyejixie.com/article6/ddissig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站網(wǎng)站排名、品牌網(wǎng)站制作、App設(shè)計(jì)企業(yè)建站、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
连江县| 吉木萨尔县| 太湖县| 南阳市| 无为县| 克东县| 西丰县| 兰溪市| 松原市| 江津市| 泰兴市| 孟村| 龙门县| 滁州市| 荥经县| 镇平县| 仪陇县| 山阴县| 胶州市| 深水埗区| 乐安县| 西林县| 紫阳县| 隆德县| 崇礼县| 辽阳县| 满洲里市| 涡阳县| 赣州市| 苍山县| 吉安县| 高邮市| 阿图什市| 芮城县| 类乌齐县| 普兰县| 乳山市| 双城市| 延安市| 镇平县| 贵定县|