Home  >  Article  >  Backend Development  >  PHP implements the sequential storage structure of linear tables

PHP implements the sequential storage structure of linear tables

WBOY
WBOYOriginal
2016-07-30 13:31:091213browse

<code><span><span>class</span><span>SqList</span>
{</span><span>public</span><span>$elem</span>;
    <span>public</span><span>$length</span>;
    <span>public</span><span>$size</span>;
}

<span><span>class</span><span>Linear</span>
{</span><span>const</span> LIST_INIT_SIZE = <span>10</span>;
    <span>const</span> LIST_INCREMENT = <span>5</span>;
    <span>private</span><span>$list</span> = <span>null</span>;

    <span>/**
     * 构造一个空的线性表
     */</span><span>public</span><span><span>function</span><span>initList</span><span>()</span>
    {</span><span>$this</span>-><span>list</span> = <span>new</span> SqList();
        <span>$this</span>-><span>list</span>->elem = <span>array</span>();
        <span>$this</span>-><span>list</span>->length = <span>0</span>;
        <span>$this</span>-><span>list</span>->size = <span>self</span>::LIST_INIT_SIZE;
        <span>return</span><span>true</span>;
    }

    <span>/**
     * 销毁线性表
     */</span><span>public</span><span><span>function</span><span>destoryList</span><span>()</span>
    {</span><span>if</span> (is_object(<span>$this</span>-><span>list</span>)) {
            <span>$this</span>-><span>list</span> = <span>null</span>;
        }
    }

    <span>/**
     * 是否为空表
     */</span><span>public</span><span><span>function</span><span>listEmpty</span><span>()</span>
    {</span><span>if</span> (is_object(<span>$this</span>-><span>list</span>)) {
            <span>return</span><span>$this</span>-><span>list</span>->length == <span>0</span> ? <span>true</span> : <span>false</span>;
        }
    }

    <span>/**
     * 返回元素个数
     */</span><span>public</span><span><span>function</span><span>listLength</span><span>()</span>
    {</span><span>if</span> (is_object(<span>$this</span>-><span>list</span>)) {
            <span>return</span><span>$this</span>-><span>list</span>->length;
        }
    }

    <span>/**
     * 获取指定位置的元素
     */</span><span>public</span><span><span>function</span><span>getElem</span><span>(<span>$i</span>)</span>
    {</span><span>if</span> (<span>$i</span> < <span>1</span> || <span>$i</span> > <span>$this</span>-><span>list</span>->length + <span>1</span>) {
            <span>return</span><span>false</span>;
        }
        <span>return</span><span>$this</span>-><span>list</span>->elem[<span>$i</span>-<span>1</span>];
    }

    <span>/**
     * 在指定位置插入元素
     */</span><span>public</span><span><span>function</span><span>listInsert</span><span>(<span>$i</span>, <span>$e</span>)</span>
    {</span><span>if</span> (<span>$i</span> < <span>1</span> || <span>$i</span> > <span>$this</span>-><span>list</span>->length + <span>1</span>) {
            <span>return</span><span>false</span>;
        }
        <span>if</span> (<span>$this</span>-><span>list</span>->length >= <span>$this</span>-><span>list</span>->size) {
            <span>$this</span>-><span>list</span>->size += <span>self</span>::LIST_INCREMENT;
        }
        <span>for</span> (<span>$j</span> = <span>$this</span>-><span>list</span>->length; <span>$j</span> >= <span>$i</span>; <span>$j</span>--) {
            <span>$this</span>-><span>list</span>->elem[<span>$j</span>] = <span>$this</span>-><span>list</span>->elem[<span>$j</span>-<span>1</span>];
        }
        <span>$this</span>-><span>list</span>->elem[<span>$i</span>-<span>1</span>] = <span>$e</span>;
        <span>$this</span>-><span>list</span>->length++;
    }

    <span>/**
     * 删除指定位置数据元素
     */</span><span>public</span><span><span>function</span><span>listDelete</span><span>(<span>$i</span>)</span>
    {</span><span>if</span> (<span>$i</span> < <span>1</span> || <span>$i</span> > <span>$this</span>-><span>list</span>->length) {
            <span>return</span><span>false</span>;
        }
        <span>$data</span> = <span>$this</span>-><span>list</span>->elem[<span>$i</span>-<span>1</span>];
        <span>for</span> (<span>$j</span> = <span>$i</span> -<span>1</span>; <span>$j</span> < <span>$this</span>-><span>list</span>->length -<span>1</span>; <span>$j</span>++) {
            <span>$this</span>-><span>list</span>->elem[<span>$j</span>] = <span>$this</span>-><span>list</span>->elem[<span>$j</span>+<span>1</span>];
        }
        <span>unset</span>(<span>$this</span>-><span>list</span>->elem[<span>$this</span>-><span>list</span>->length-<span>1</span>]);
        <span>$this</span>-><span>list</span>->length--;
        <span>return</span><span>$data</span>;
    }
}</code>

Copyright Statement: This article is the original article of the blogger and may not be reproduced without the permission of the blogger.

The above introduces the sequential storage structure of linear tables implemented in PHP, including aspects of it. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn