PHP数据结构(一)——顺序结构线性表

PHP数据结构(一)——顺序结构线性表

(原创内容,转载请注明来源,谢谢)

线性表的要求:存在唯一的“第一个”元素与“最后一个”元素,每个元素最多一个前驱和一个后继。

线性表的顺序结构即数据存储单元是连续的,每个数的下一个数据即为该结构的下一个数。

优点:顺序结构由于其数据是依次排开的,因此在查找数据时很方便,可以直接根据编号定位到数值。同时,要修改某个数值也很快捷,可以直接定为到数值并进行修改。

缺点:由于其是顺序结构,因此要在数据当中插入数据或者删除数据较为复杂,需要改动插入点之后所有数据的位置。

PHP实现顺序结构线性表:

代码实现了数据初始化、增删改查、清空数据的过程。结果如下图所示:

源代码如下所示:

<?php
//生成一个1,2,3...,n的数据
function generalSeq($n){
$seq = array();
for($i=0;$i<$n;$i++){
          $seq[$i] = $i+1;
}
return $seq;
}
//清空数据
function freeSeq($seq){
unset($seq);
return $seq;
}
//查找第i个数据
function searchSeq($seq, $n){
$count = count($seq);
if($count==0||$n<=0||$n>$count){
          return '查询的范围有误';
}else{
          return $seq[$n];
}
}
//修改第i个数据
function updateSeq($seq, $n, $n_value){
$count = count($seq);
if($count==0||$n<=0||$n>$count){
          return $seq;
}else{
          $seq[$n] = $n_value;
          return $seq;
}
}
//插入数组i,
//假设两个数组均非递减有序,
//要求插入后的数组仍非递减有序
function addSeq($old_seq, $new_seq){
$final_seq = array();
$c_old = count($old_seq);
$c_new = count($new_seq);
$k = 0;
$i = 0;
$j = 0;
//echo $c_new;die();
while($i<$c_old&&$j<$c_new){
          if($old_seq[$i]<=$new_seq[$j]){
                    $final_seq[$k]= $old_seq[$i];
                    $k++;
                    $i++;
          }else{
                    $final_seq[$k]= $new_seq[$j];
                    $k++;
                    $j++;
          }       
}
while($i<$c_old){
          $final_seq[$k] =$old_seq[$i];
          $k++;
          $i++;                  
}
while($j<$c_new){
          $final_seq[$k] =$new_seq[$j];
          $k++;
          $j++;                  
}
return $final_seq;
}
//删除数组第n个元素
function deleteSeq($seq, $n){
$c_seq = count($seq);
$count = count($seq);
if($count==0||$n<=0||$n>$count){
          return $seq;
}else{
          for($i=$n-1;$i<$c_seq-1;$i++){
                    $seq[$i] =$seq[$i+1];
          }
          unset($seq[$c_seq-1]);
          return $seq;
}
}
$seq = generalSeq(10);
echo "<br />new seq:";
print_r($seq);
echo "<br />search result:".searchSeq($seq, 5);
$new_seq = array(2, 4, 5, 7, 9, 13);
$seq = addSeq($seq,$new_seq);
echo "<br />add result:";
print_r($seq);
echo "<br />update result:";
$seq = updateSeq($seq, 3, 33);
print_r($seq);
echo "<br />delete result:";
$seq = deleteSeq($seq,6);
print_r($seq);
echo "<br />free result:";
$seq = freeSeq($seq);
print_r($seq);
?>

—— written by linhxx 2017.06.14

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

【优秀题解】问题 1442:打印十字图

我的思路就是一步一步的分析,首先我想到的就是分配一块内存来储存图案,通过观察知道图案是一个方正,于是想到用字符矩阵。然后分布完成,首先就是把方块字符中...

291
来自专栏杂七杂八

numpy.nonzero()函数

官方文档如下: numpy.nonzero(a) Return the indices of the elements that are non-zero....

2163
来自专栏Java工程师日常干货

对HashMap的思考及手写实现前言对HashMap的思考通过写一个迷你版的HashMap来深刻理解

HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设...

702
来自专栏前端架构

js函数中关于fn()和return fn()的一个问题

在js中,经常会遇到在函数里调用其它函数的情况,这时候会有 fn() 这种调用方式,还有一种是 return fn() 这种调用方式,一些初学者经常会一脸萌逼地...

712
来自专栏深度学习之tensorflow实战篇

python 对矩阵进行复制操作 np.repeat 与 np.tile区别

python 对矩阵进行复制操作 np.repeat 与 np.tile区别 二者区别 二者执行的是均是复制操作; np.repeat:复制的是多维数组的...

38910
来自专栏逆向技术

逆向知识第七讲,三目运算符在汇编中的表现形式,以及编译器优化方式

                  逆向知识第七讲,三目运算符在汇编中的表现形式 一丶编译器优化方式 首先说一下编译器优化方式. 1.常量折叠 2.常量传播 3...

1728
来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》 附录A NumPy高级应用A.1 ndarray对象的内部机理A.2 高级数组操作A.3 广播A.4 ufunc高级应用A.5 结构化和记录式数组A.6 更多

在这篇附录中,我会深入NumPy库的数组计算。这会包括ndarray更内部的细节,和更高级的数组操作和算法。 这章包括了一些杂乱的章节,不需要仔细研究。 A.1...

4756
来自专栏Python爱好者

Java基础笔记02

722
来自专栏王小雷

Python之NumPy实践之数组和矢量计算

Python之NumPy实践之数组和矢量计算 1. NumPy(Numerical Python)是高性能科学技术和数据分析的基础包。 2. NumPy的nda...

1998
来自专栏微信公众号:Java团长

对HashMap的思考及手写实现

HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设...

451

扫描关注云+社区