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

增加元素

如下图所示  对顺序列表 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实现顺序表实例的更多相关文章

  1. Arrays.asList () 不可添加或删除元素的原因

    Java中奖数组转换为List<T>容器有一个很方便的方法 Arrays.asList(T ... a),我通过此方法给容器进行了赋值操作,接着对其进行 添加元素,却发现会抛出一个(jav ...

  2. JavaScript向select下拉框中添加和删除元素

    JavaScript向select下拉框中添加和删除元素 1.说明 a   利用append()方法向下拉框中添加元素 b   利用remove()方法移除下拉框中最后一个元素 2.设计源码 < ...

  3. js进阶 9-11 select选项框如何动态添加和删除元素

    js进阶 9-11 select选项框如何动态添加和删除元素 一.总结 一句话总结: 二.js进阶 9-11 select选项框如何动态添加和删除元素 1.案例说明 2.相关知识 Select 下拉列 ...

  4. javascript数组在指定位置添加和删除元素

    在JavaScript中,Array对象提供了一个强大的splice()方法,利用这个方法可以达到在数组的指定位置添加和删除元素的目的. 指定位置删除元素 要在指定位置删除元素,可以使用splice( ...

  5. 4. 理解Update、Enter、Exit 与 添加、删除元素

    理解Update.Enter.Exit 与 添加.删除元素 在使用data()绑定数据时,例如:现在我们有一个数组[3,6,9,12,15],我们可以将数组每一项与一个<p>绑定,但是,现 ...

  6. (转载)php数组添加、删除元素的方法

    (转载)http://www.phpgs.com/html/php/phpjichu/20120130440.html 带来一篇php 数组 添加元素.删除元素的方法的文章,有需要的php学习者参考下 ...

  7. python中List添加、删除元素的几种方法

    一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作).在Pytho ...

  8. Python -- 修改、添加和删除元素

    大多数列表将是动态的,这意味着列表创建后,将随着程序的运行增删元素. 修改列表元素 修改列表元素的语法与访问列表元素的语法类似.要修改列表元素,可指定表名和要修改的元素指引,再指定该元素的新值. #代 ...

  9. JQUERY添加、删除元素、eq()方法;

    一.jQuery - 添加元素 1.append() - 在被选元素内部的结尾插入指定内容 2.prepend() - 在被选元素内部的开头插入指定内容 3.after() - 在被选元素之后插入内容 ...

随机推荐

  1. 2019 ICPC 沈阳网络赛 J. Ghh Matin

    Problem Similar to the strange ability of Martin (the hero of Martin Martin), Ghh will random occurr ...

  2. HDU 4609 3-idiots ——(FFT)

    这是我接触的第一个关于FFT的题目,留个模板. 这题的题解见:http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html. FFT的 ...

  3. weui-wxss框架实现博远企信小程序

  4. Docker网络原则入门:EXPOSE,-p,-P,-link

    如果你已经构建了一些多容器的应用程序,那么肯定需要定义一些网络规则来设置容器间的通信.有多种方式可以实现:可以通过--expose参数在运行时暴露端口,或者在Dockerfile里使用EXPOSE指令 ...

  5. [转]解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).

    Git fetch和git pull的区别: 都可以从远程获取最新版本到本地 1.Git fetch:只是从远程获取最新版本到本地,不会merge(合并) $:git fetch origin mas ...

  6. Deep & Cross Network总结

    一.介绍 CTR预估全称是Click Through Rate,就是展示给用户的广告或者商品,估计用户点击的概率.公司规模较大的时候,CTR直接影响的价值在数十亿美元的级别.广告支付一个非常流行的模型 ...

  7. Linux中工作目录切换命令

    1.pwd命令用于显示当前的工作目录 2.cd命令用于切换工作路径,格式为:cd [目录名称] 参数 作用 - 切换到上一次的 目录,如:cd - ~ 切换到”家目录“,如:cd ~ ~usernam ...

  8. Java打印素数(质数)

    要求:打印 2 - 100000 当中的素数与非素数.(素数定义:在大于1的自然数中,除了1和它本身以外不再有其他因数) 1. 常规方式——对正整数n,如果用2到  之间的所有整数去除,均无法整除,则 ...

  9. 【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒

    由于按一千条一插程序长期无反应,之后改为百条一插方式,运行完发现插入百万记录需要9m17s,虽然比MySQL效率差,但比单条插入已经好不少了. 对Oracle的批量插入语法不明的请参考:https:/ ...

  10. 阿里PB级Kubernetes日志平台建设实践

    干货分享 | 阿里PB级Kubernetes日志平台建设实践https://www.infoq.cn/article/HiIxh-8o0Lm4b3DWKvph 日志最主要的采集工具是 Agent,在 ...