码迷,mamicode.com
首页 > 其他好文 > 详细

数组函数与数据结构《实现堆栈,实现队列》

时间:2014-08-08 15:28:36      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:http   使用   io   strong   数据   2014   ar   cti   

在强类型的变成语言中,有专用的数据结构解决方案。通常都是创建一个容器,在这个容器中可以存储任意类型的数据,并且可以根据容器中存储的数据决定容器的容量,达到可以变长的容器结构,比如链表、堆栈及队列等都是数据结构中常用的形式。在PHP中,通常都是使用数组来完成其他语言使用数据结构才能完成的工作。它是弱类型语言,在同一个数组中就可以存储多种类型的数据,而且PHP中的数组没有长度限制,数组存储数据的容量还可以根据里面元素个数的增减自动调整。

一、使用数组实现堆栈

堆栈是数据结构的一种实现形式,是一种使用非常广泛的存储数据的容器。在堆栈这种容器中,最后压入的数据(进桟),将会被最先弹出(出栈)。即在数据存储时采用“先进后出”的数据结构。在PHP中,将数组当做一个栈,使用array_push()和array_pop()两个系统函数即可完成数据的进桟和出栈操作。

①函数array_push()

array_push()函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。该函数等于多次调用$array[]=$value。其函数的原型如下:

int array_push(array &array ,mixed var [,mixed...])

该函数的第一个参数是必选的,作为栈容器的一个数组。第二个参数也是必选的,在第一个参数中的数组尾部添加的一个数据。还可以有多个可选参数,都可以添加到第一个参数的数组中的尾部,即入栈。但需要注意即使数组中有字符串键名,添加的元素也始终是数字键。函数array_push()使用的代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    $a=array("Dog","Cat");
    array_push($a,"Horse","Bird");
    print_r($a);          //输出Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )
 
    //带有字符串键的数组:
    $a=array("a"=>"Dog","b"=>"Cat");
    array_push($a,"Horse","Bird");
    print_r($a);              //输出Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird )
 
    //使用array_push()函数和使用这种直接赋值初始化数组的方式是一样的
    $lamp["web"]= "www";
    print_r($a)          //输出Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird [web]=> www)
?>

如果用array_push()来给数组添加一个单元,还不如用“$array[]=$value”形式,因为这样没有调用函数的额外负担,而且使用后者还可以添加键值是字符串的关联数组。如果第一个参数不是数组,array_push()将发出一条警告。这和“$array[]=$value”的行为不同,后者会新建一个数组。

②array_pop(array &array)

array_pop函数删除数组中的最后一个元素,即将数组最后一个单元弹出(出栈),并将数组的长度减1,如果数组为空(或者不是数组)将返回NULL。其函数的原型如下:

mixed array_pop(array &array)

该函数只有一个参数,即作为栈的数据。返回弹出的数组中最后一个元素的值。函数array_pop()使用的代码如下所示:

1
2
3
4
5
6
7
<?php
    //声明一个数组作为栈
    $lamp = array("Linux","Apache","MySQL","PHP");
 
    array_pop($lamp);
    print_r($lamp)          //输出 array([0]=>Linux [1]=>Apache [2]=>MySQL)
?>

二、使用数组实现队列

PHP中的数组处理函数还可以使用数组实现队列的操作。堆栈是“后进先出”原则,而一个队列则允许在一端插入数据,在另一端删除数据,也就是实现最先进入队列的数据最先退出队列,就像银行的排号机,最先排好的号最先办理业务。即队列是“先进先出”的原则。

使用array_push()和array_pop()函数都是从数组的最后添加数据和删除数据,如果使用array_push()函数在数组的最后添加数据,而将数组中第一个元素删除就可以实现一个队列。

③函数array_shift()

函数array_shift()可以实现删除数组中的第一个元素,并返回被删除元素的值。其函数的原型如下:

mixed array_shift(array &array)

该函数和array_pop()函数一样,都是只有一个必选参数,其参数为实现队列的数组。将数组中第一个单元移出并作为结果返回,将数组的长度减1,还将所有其他元素向前移动一位。所有的数字键名将改为从0开始计数,字符串键名将保持不变。如果数组为空(或者不是数组),则返回NULL。函数array_shift()使用的代码如下所示:

1
2
3
4
5
6
7
8
9
10
<?php
    //带有字符串键值的关联数组
    $lamp = array("a"=>"Linux","b"=>"Apache","c"=>"MySQL","d"=>"PHP");
    array_shift($lamp);       
    print_r($lamp);            //输出:Array([b]=>Apache [c]=>MySQL [d]=>PHP)
 
    $lamp = array("Linux","Apache","MySQL","PHP");
    array_shift($lamp);
    print_r($lamp);            //数字下标重新索引Array([0]=>Apache [1]=>MySQL [2]=>PHP)
?>

④函数array_unshift()

在PHP中海可以使用array_unshift()函数在队列数组的开头插入一个或多个元素,该函数执行成功将返回插入元素个数,使用格式和函数array_push()是一样的。通过前面介绍的这4个函数从而实现了从数组的任意一端添加和删除数据。

 

数组函数与数据结构《实现堆栈,实现队列》,布布扣,bubuko.com

数组函数与数据结构《实现堆栈,实现队列》

标签:http   使用   io   strong   数据   2014   ar   cti   

原文地址:http://www.cnblogs.com/ncong/p/3899212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!