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


    在强类型的变成语言中,有专用的数据结构解决方案。通常都是创建一个容器,在这个容器中可以存储任意类型的数据,并且可以根据容器中存储的数据决定容器的容量,达到可以变长的容器结构,比如链表、堆栈及队列等都是数据结构中常用的形式。在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个函数从而实现了从数组的任意一端添加和删除数据。

     
  • 相关阅读:
    log4j 配置文件详解
    Java 发送Get和Post请求
    java 基于百度地图API GPS经纬度解析地址
    Spring MVC 注解json 配置
    web.xml中classpath 解释
    【错误信息】springMVC No mapping found for HTTP request with URI
    栈和堆
    结构体和类的区别,联系
    Delegate,Block,Notification, KVC,KVO,Target-Action
    Protocol, Delegate
  • 原文地址:https://www.cnblogs.com/ncong/p/3899212.html
Copyright © 2020-2023  润新知