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

线性表

时间:2015-03-16 23:05:41      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

线性表的特点是除第一个元素和最后一个数据元素外,每个数据元素只有一个前驱元素和一个后继元素。线性表的是一种最简单的线性结构,线性表的操作特点是可以在任意位置插入和删除一个数据元素。线性表可以使用顺序结构和链式结构存储。用顺序存储结构实现的线性表称为顺序表,用链式结构实现的线性表称为链式表,链式表有单链表,循环单链表双链表

      线性表的顺序存储及实现:

            在C语言中,实现线性表的顺序存储最好的办法是用数组,数组可以申请一组连续的空间地址。

     线性表的抽象数据类型:

            数据集合 a={sf,sdf,sdf,23,23,}

            数据操作集合:

               添加,删除,查找,初始化线性表,当前元素个数

          线性表的实现:

          技术分享

技术分享

技术分享

<?php

/**
*
*线性表的实现
*/
header(‘Content-type: text/html;charset=utf-8‘);
class table {
    public $size = 0; //元素个数而非数组大小
    public $arr = array();
    public $maxsize = 10;
    
    public function __construct($arr=array()) {
        $this->arr = $arr;
        $this->size = count($arr);
        
    }
    /**
    *插入位置,插入内容
    */
    public function add($index,$str) {
        if($this->size == $this->maxsize) { echo ‘已经插满‘;return false;}
        else if($index < 0 || $index > $this->size) {
            echo ‘插入位置不合法‘;return false;
        }else{
            /**为插入前做准备
            *数组加一位,并且把数组依次后移替换值
            */
            for($i=$this->size;$i>$index;$i--) {
                $this->arr[$i] = $this->arr[$i-1];
            }
            $this->arr[$index] = $str;
            $this->size++;
            return;
        }
    }
    
    public function delete($index) {
        if($this->size <= 0) {
            echo ‘当前为空‘;
            return false;
        }else if($index < 0 || $index > $this->size) {
            echo ‘无数据可shanc‘;return false;
        }else{
            for($i= $index;$i<= $this->size -2;$i++) { //数据前移
                $this->arr[$i] = $this->arr[$i+1];
            }
            unset($this->arr[$this->size-1]);  //删除最后数据及特殊数据
            $this->size--;
        }
    
    }
}

$table = new table(array(7));
$table->add(0,3);
print_r($table->arr);

/**
*链式存储结构存储线性表数据元素的方法,是把存放数据元素的节点用指针域构造成链。指针指向物理存储单元的地址变量。根据指针域的不同和节点构造不同可以分为单链表,单循环链表,双链表。
在链式存储结构中,每当插入时需要动态申请地址空间,因此在内存地址上空间链式是不相连的。
*
*/

 

技术分享技术分享

技术分享

技术分享

技术分享
class listtable {
    public $n;
    public $firest;
    public $end;
    public function __construct() {
        $this->firest = new Node;
        $this->firest->content = null;
        $this->firest->next    = null;
        $this->n=0;
    }
    public function size() {
        $this->n=0;
        for($i = $this->firest->next;$i!=null;$i=$i->next){
            $this->n++;
        }
        return $this->n;
    }
    
    public function add($index,$content) {
        $size = $this->size();
        if($index == 1) {
            $oldfirest = $this->firest;
            $this->firest = new Node;
            $this->firest->content = $content;
            $this->firest->next = $oldfirest;
            $this->n++;
            return true;
        }
        $p = $this->firest;
        $j = 1;
        $pre = $index-1;
        while($p->next != null && $j < $pre) {//将链表位置至于删除位置前一个位置
            $p = $p->next;
            $j++;
        }
        if($j != $pre) {
            return false;
        }
        
        $q = new Node;
        $q->content = $content;
        $q->next = $p->next;
        $p->next = $q;
        $this->n++;
        return true;
    }
    
    public function delete($index) {
        if($index == 1) {
            $this->firest = $this->firest->next;
            $this->n--;
        }
        $p = $this->firest;
        $j = 1;
        $pre = $index - 1;
        while($p->next != null && $j < $pre){ //将链表位置至于删除位置前一个位置
            $p = $p->next;
            $j++;
        }
        if($j != $pre) {
            return false;
        }
        $p->next = $p->next->next;
        $this->n--;
    }
}

class Node{
    public $content;
    public $next;
    
}


$listtable = new listtable;
$listtable->add(1,80);
$listtable->add(1,79);
$listtable->add(1,78);
echo $listtable->size().‘<br/>‘;
$listtable->add(4,10);
echo $listtable->size().‘<br/>‘;
$p = $listtable->firest;
while($p->next != null){
    echo $p->content.‘<br/>‘;
    $p = $p->next;
}
$listtable->delete(4);
$p = $listtable->firest;
while($p->next != null){
    echo $p->content.‘<br/>‘;
    $p = $p->next;
}

 实现任意插入链表和删除的链表的做好方式是做双向链表。

线性表

标签:

原文地址:http://www.cnblogs.com/phplhs/p/4334070.html

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