码迷,mamicode.com
首页 > Web开发 > 详细

顺序表添加与删除元素以及 php实现顺序表实例

时间:2019-11-07 09:22:41      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:顺序   ext   let   维数   image   表示   oca   代码   pre   

对顺序表的操作,添加与删除元素。

增加元素

如下图所示  对顺序列表 Li [1328,693,2529,254]  添加一个元素 111 ,有三种方式:

技术图片

 

 

a)尾部端插入元素,时间复杂度O(1);    保证了原始顺序列表的顺序。

b)非保序的加入元素(不常见),时间复杂度O(1);   打乱了原始顺序列表的顺序。

c)保需的元素插入,时间复杂度O(n);    保证了原始顺序列表的顺序。

删除元素

如下图所示  对顺序列表 Li [1328,693,2529,254]  删除元素 ,有三种方式:

技术图片

 

 

a)删除表尾元素,时间复杂度O(1);

b)非保序的元素删除,时间复杂度O(1);

c)保序的元素删除,时间复杂度O(n);  比如上图删除1号元素。

 

list存储数据,允许不同类型的数据作为元素:如,Li [ 121, ‘hello‘, 3.14, 1000 ], 因此List采用元素外置的方式来做。

元素外置的方式:可以理解为,列表list中,存储的是各个元素的地址,各个元素是外置到list外部, 每个元素的地址对应外部的元素。如下图:

技术图片

 支持顺序表存储区扩充的,称作动态顺序表

PHP代码实现动态的顺序表:

  1 <?php
  2 /**
  3  * Class Sequence
  4  * desc:顺序表的实现:
  5  * 顺序表:在内存中元素是顺序存储的,除了首部元素和尾部元素,其余元素是一一紧凑相连的;一般用一维数组表示。
  6  * 特点:顺序表元素是外置的,顺序表中只存元素的地址;顺序表中的元素可能是多种数据类型类型的元素
  7  * getElem 获取元素的位置
  8  * getListLen 获取顺序表的长度
  9  * getPriorElem 获取前一个元素
 10  * getNextElem 获取后一个元素
 11  * InsertList 在第index个位置插入元素elem,返回新的顺序表
 12  * DeleteList 在第index个位置删除elem,返回新的顺序表
 13  */
 14 
 15 class Sequence
 16 {
 17     public $seqArr;
 18     public $length;
 19     public function __construct($arr)
 20     {
 21         $this->seqArr = $arr;
 22         $this->length = count($arr);
 23     }
 24 
 25     //获取顺序表List中给定元素
 26     public function getElem($index)
 27     {
 28         if($index<0 || $index==0 || $index>$this->length)
 29         {
 30             return "Error!";
 31         }
 32         return $this->seqArr[$index];
 33     }
 34 
 35     //获取顺序表List的长度
 36     public function getListLen($arr)
 37     {
 38         return $this->length;
 39     }
 40 
 41     //获取顺序表List中给定元素位置
 42     public function getLocateElem($elem)
 43     {
 44         if(in_array($elem,$this->seqArr))
 45         {
 46             for ($i=0;$i<$this->length;$i++)
 47             {
 48                 if($this->seqArr[$i] == $elem)
 49                 {
 50                     return $i+1;
 51                 }
 52             }
 53         }
 54         else
 55         {
 56             return "Error! elem not in Sequence!";
 57         }
 58     }
 59     
 60     //获取给定元素在顺序表List中的上一个元素
 61     public function getPriorElem($elem)
 62     {
 63         if(in_array($elem,$this->seqArr))
 64         {
 65             for ($i=0;$i<$this->length;$i++)
 66             {
 67                 if($this->seqArr[$i] == $elem && $i==0)
 68                 {
 69                     return "Error: This is first Elem in Sequence!";
 70                 }
 71                 elseif($this->seqArr[$i] == $elem)
 72                 {
 73                     return $this->seqArr[$i-1];
 74                 }
 75             }
 76         }
 77         else
 78         {
 79             return "Error!";
 80         }
 81     }
 82 
 83     //获取给定元素在顺序表List中的下一个元素
 84     public function getNextElem($elem)
 85     {
 86         if(in_array($elem,$this->seqArr))
 87         {
 88             for ($i=0;$i<$this->length;$i++)
 89             {
 90                 if($this->seqArr[$i] == $elem && $i==($this->length-1))
 91                 {
 92                     return "Error: This is final Elem in Sequence!";
 93                 }
 94                 elseif($this->seqArr[$i] == $elem)
 95                 {
 96                     return $this->seqArr[$i+1];
 97                 }
 98             }
 99         }
100         else
101         {
102             return "Error! elem not in Sequence!";
103         }
104 
105     }
106 
107     //顺序表第index 中新增一个元素elem,返回新的顺序表
108     public function InsertList($index,$elem)
109     {
110         if($this->length == 0 || $index > $this->length || $index <0)
111         {
112             return "Error !";
113         }
114         for ($i=($this->length-1);$i>$index-1;$i--)
115         {
116             $this->seqArr[$i+1] = $this->seqArr[$i];
117         }
118         $this->seqArr[$index] = $elem;
119         $this->length = $this->length+1;
120         return $this->seqArr;
121     }
122 
123     //顺序表删除第index中一个元素elem,返回新的顺序表
124     public function DeleteList($index)
125     {
126         if($this->length == 0 || $index > $this->length || $index <0)
127         {
128             return "Error !";
129         }
130         unset($this->seqArr[$index]);
131         $this->length--;
132         return $this->seqArr;
133     }
134 }
135 
136 $arr = [6,‘好‘,‘你‘,9,3.14];
137 $se = new Sequence($arr);
138 //var_dump($se->getElem(1)); echo"\r\n";
139 //var_dump($se->getListLen($arr)); echo"\r\n";
140 //var_dump($se->getLocateElem(9)); echo"\r\n";
141 //var_dump($se->getPriorElem(9)); echo"\r\n";
142 //var_dump($se->getNextElem(9)); echo"\r\n";
143 //print_r($se->InsertList(1,81)); echo"\r\n";
144 print_r($se->DeleteList(3)); echo"\r\n";

 

 

 

 

 

 

顺序表添加与删除元素以及 php实现顺序表实例

标签:顺序   ext   let   维数   image   表示   oca   代码   pre   

原文地址:https://www.cnblogs.com/dreamofprovence/p/11809768.html

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