顺序表添加与删除元素以及 php实现顺序表实例
对顺序表的操作,添加与删除元素。
增加元素
如下图所示 对顺序列表 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实现顺序表实例的更多相关文章
- Arrays.asList () 不可添加或删除元素的原因
Java中奖数组转换为List<T>容器有一个很方便的方法 Arrays.asList(T ... a),我通过此方法给容器进行了赋值操作,接着对其进行 添加元素,却发现会抛出一个(jav ...
- JavaScript向select下拉框中添加和删除元素
JavaScript向select下拉框中添加和删除元素 1.说明 a 利用append()方法向下拉框中添加元素 b 利用remove()方法移除下拉框中最后一个元素 2.设计源码 < ...
- js进阶 9-11 select选项框如何动态添加和删除元素
js进阶 9-11 select选项框如何动态添加和删除元素 一.总结 一句话总结: 二.js进阶 9-11 select选项框如何动态添加和删除元素 1.案例说明 2.相关知识 Select 下拉列 ...
- javascript数组在指定位置添加和删除元素
在JavaScript中,Array对象提供了一个强大的splice()方法,利用这个方法可以达到在数组的指定位置添加和删除元素的目的. 指定位置删除元素 要在指定位置删除元素,可以使用splice( ...
- 4. 理解Update、Enter、Exit 与 添加、删除元素
理解Update.Enter.Exit 与 添加.删除元素 在使用data()绑定数据时,例如:现在我们有一个数组[3,6,9,12,15],我们可以将数组每一项与一个<p>绑定,但是,现 ...
- (转载)php数组添加、删除元素的方法
(转载)http://www.phpgs.com/html/php/phpjichu/20120130440.html 带来一篇php 数组 添加元素.删除元素的方法的文章,有需要的php学习者参考下 ...
- python中List添加、删除元素的几种方法
一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作).在Pytho ...
- Python -- 修改、添加和删除元素
大多数列表将是动态的,这意味着列表创建后,将随着程序的运行增删元素. 修改列表元素 修改列表元素的语法与访问列表元素的语法类似.要修改列表元素,可指定表名和要修改的元素指引,再指定该元素的新值. #代 ...
- JQUERY添加、删除元素、eq()方法;
一.jQuery - 添加元素 1.append() - 在被选元素内部的结尾插入指定内容 2.prepend() - 在被选元素内部的开头插入指定内容 3.after() - 在被选元素之后插入内容 ...
随机推荐
- 关于解决ruby源码安装 gem install报错问题
因做redis集群需要安装ruby,源码安装过后gem install redis安装redis接口报错 解决方案: 确保主机安装zlib,没有安装执行 yum -y install zlib zli ...
- hashCode 的常规协定是:
hashCode 的常规协定是: . 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改 ...
- 亚马逊AWS服务器CentOS/Linux系统Shell安装Nginx及配置自启动
领了一个亚马逊的1年免费服务器,今天尝试安装 Nginx 服务器,使用原生的 Shell 方法. 为了方便以后查看,就把过程记录一下. 注意:亚马逊(AWS)服务器默认只能用 user-ec2 账户进 ...
- OpenTK学习笔记(2)-工作窗口的三种方法创建方法(winfrom窗体控件形式创建)
参考资料: https://social.msdn.microsoft.com/Forums/zh-TW/1b781685-c670-4338-953d-1957a8f24a66/opentkglco ...
- PhpStorm 增加Swoole智能提示
下载https://github.com/eaglewu/swoole-ide-helper的源码 git clone https://github.com/eaglewu/swoole-ide-he ...
- 寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现。本文记录HAProxy服务热加载后某微服务50%概率失效的问题。设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加
寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现.本文记录HAPro ...
- keras Model 3 共享的层
1 入门 2 多个输入和输出 3 共享层 考虑这样的一个问题:我们要判断连个tweet是否来源于同一个人. 首先我们对两个tweet进行处理,然后将处理的结构拼接在一起,之后跟一个逻辑回归,输出这两条 ...
- 严重性 代码 说明 项目 文件 行 禁止显示状态错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译。
严重性 代码 说明 项目 文件 行 禁止显示状态错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译. 默认情况下,对象文件最多可存放 65,536 (2^16) 个可寻址的 ...
- MERN——MongoDB && React && Node && Express
原文链接:Let’s build a full stack MongoDB, React, Node and Express (MERN) app github源码地址:jelorivera08/re ...
- office激活方式,超简单
只需要安装个小小的程序,亲测安全可靠 详情点击下方链接 https://blog.csdn.net/weixin_40941966/article/details/80872533