本文实例讲述了PHP链表操作。分享给大家供大家参考,具体如下:
在php中运行数据结构,基本都是用数组模拟的,只是用一直思想而已。
今天遇到的这个问题是,两个链表进行合并。
链表合并效果图
问题描述:A链表是模版链表,B链表的长度不确定,A,B二个链表结合后形成C链表。
说一下编程思想:A链表是模版链表所以在运算完成了,长度了唯一不变的。而B链表的长度是不确定的。所以可以先对B链表进行判断,分了三步:
B链表是不是为空
B链表是不是比A链表短或者相等
B链表是不是比A链表长
编程就是要列出尽可能的可能性。抓住变量,由于题目要求,当A链表和B链表相等时,直接返回B链表,所以不用考虑这个问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
$node = array ( "nameid" => "" , "shoolid" => " " , "depid" => " " , "start" => " " , "end" => " " ); /* 现在上面数据,有的数据存在A链表里面,有的存在B链表里面,如果都没有,用A链表的数据节点来代替。 开始第一次完成的时候,想了一个很蛋痛的方式,还用到arra_diff()函数用这个链表作差。后来仔细思考了一下。 */ //$data 表示B链表 //$time 表示A链表 //这里为了节约资源,没开第三条链表,而是在B链表中操作,为什么要选一条不确定长度的链表 //看完你就知道为什么了 if ( empty ( $data )) // { //申请节点 $data = array (); foreach ( $time as $value ) { //将A链表的数据进行需求处理,组成我们需要的节点模式 $array = array ( "nameid" => $value [ "id" ], "depid" => $depid , "schoolid" => $schoolid , "start" => "" , "end" => "" ); array_push ( $data , $array ); //将新节点压进栈 } } else if ( count ( $data )<= count ( $time )) //进行长度对比 { for ( $i =0; $i < count ( $time ); $i ++) //for循环,不建议在for循环继续动态判断,我这里是偷懒了。 { if ( empty ( $data [ $i ])) { //如果数据节点空,则构建节点 $array = array ( "nameid" => $time [ $i ][ "id" ], "depid" => $depid , "schoolid" => $schoolid , "start" => "" , "end" => "" ); array_push ( $data , $array ); } } } |
上面的算法就简单的实习了,将A链表的数据,和B的数据组合。
希望本文所述对大家PHP程序设计有所帮助。