简介
mysql> set global wait_timeout=10;
mysql> show global variables like 'wait_timeout';
sql 来处理自动增长的 开始值
alter table table_name AUTO_INCREMENT = N
SELECT * FROM `v3_lottery` order by rand() limit 5;//低效率
//高效率
SELECT * FROM `v3_lottery` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `v3_lottery`)-(SELECT MIN(id) FROM `v3_lottery`))+(SELECT MIN(id) FROM `v3_lottery`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
unix_timestamp(time);FROM_UNIXTIME(time)
select aid,title from 9tour_travels where instr(ecityids,',1642,') and shenhe=1 and is_deleted=0 order by aid desc limit 3; 这个 先shenhe=1 再 is_deleted=0
UPDATE 9ku_singer_zhuanji as a, old_9ku.9ku_singer_zhuanji as b SET a.zjpubtime = b.zjpubtime WHERE a.id = b.id;
$db->query("SET group_concat_max_len = 20480000;");
$sql = "SELECT group_concat(CAST(main AS char)) as gather FROM {$this->member_attention_table} WHERE was=$uid";
order by substring_index('".$mids."',a.id,1)
order by field(a.id,".$mids.") ;";
select FIND_IN_SET('2','1,2');返回2
select UserName,replace(replace(replace(replace(concat("[",HotelName,"]",Title),'400-666-5511','400-626-5577'),'4006665511','400-626-5577'),'住哪网','九游网'),'zhuna.cn','9tour.cn') as Title,from jd_question where UserID>0 ORDER BY ID DESC LIMIT 10 ;
$.post("test.php", $("#testform").serialize());
$title = iconv("GB2312", "UTF-8", $title);
select 'update 9ku_music_info_'+replace(str(right(id,1))
,' ','')+' set wma_time='''+replace(str(wma_time),' ','')+''',wma_size='''+replace(str(wma_size),' ','')+''',mp3_time='''+replace(str(mp3_time),' ','')+''',mp3_size='''+replace(str(mp3_size),' ','')+''' where music_id='+replace(str(id),' ','')+';' from musiclist where
id in(94541,199426,433273,663840)
win 命令导入sql文件
mysql -u root -p --default-character_set=utf8
#登录mysql并指定登陆后的默认字符集,如果你的mysql在PATH环境变量中没有,直接敲是不会出来的(要到mysql的bin目录)
mysql> create database my_data default character set utf8 COLLATE utf8_general_ci
#创建名为my_data的数据库并且指定默认字符集为utf8,校对规则为utf8_general_ci
mysql> show variables like "character_set_database"
#可以查看Mysql数据库的默认字符集,如果不是utf8就要修改一下了
mysql> set character_set_database=utf8;
#修改默认字符集为utf8
mysql> source "sql文件存在的绝对路径"
#注意,此时的绝对路径绝对会出现"\"这种符号,在mysql中,我们要把sql文件的绝对路径中的"\"改为"/"导入
header("Content-type:text/html;charset=utf-8");
//判断是不是全部为中文
$key="我爱你";
if(!eregi("[^\x80-\xff]","$key")){
$key = $key;
//echo "全是中文";
}else{
$url_bak=$_SERVER['HTTP_REFERER'];
die("");
header("Location:".$url_bak);
//echo "不是";
}
//window.scrollTo(0,0);回到顶部
//javascript:history.go(-1);"
?>
//mktime(hour,minute,second,month,day,year,is_dst)
error_reporting (0);
header("Content-type:text/html;charset=utf-8");
@header("Cache-Control:max-age=86400");//
header('Cache-Control: max-age=86400,must-revalidate');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT' );
header("Expires: " . gmdate('D, d M Y H:i:s', time() + 86400 ). "GMT");
//以上信息表示该文件自请求后24小时后过期。
//其他需要处理的动态页面直接调用即可。
$m = date('Y-m-d');
$rs[]= date( "Y-m-d", mktime(0,0,0,date("m",strtotime($m))-3,date("d",strtotime($m)),date("Y",strtotime($m))));
print_r($rs);
date_default_timezone_set("UTC");
function GetTheMonth($date){//获取指定日期所在月的第一天和最后一天
$firstday = date("Y-m-01",strtotime($date));
$lastday = date("Y-m-d",strtotime("$firstday +1 month -1 day"));
return array($firstday,$lastday);
}
function GetPurMonth($date){//获取指定日期上个月的第一天和最后一天
$time=strtotime($date);
$firstday=date('Y-m-01',strtotime(date('Y',$time).'-'.(date('m',$time)-1).'-01'));
$lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
return array($firstday,$lastday);
}
function GetNextMonth($date){//获取指定日期下个月的第一天和最后一天
$arr = getdate();
if($arr['mon'] == 12){
$year = $arr['year'] +1;
$month = $arr['mon'] -11;
$day = $arr['mday'];
if($day < 10){
$mday = '0'.$day;
}else {
$mday = $day;
}
$firstday = $year.'-0'.$month.'-01';
$lastday = $year.'-0'.$month.'-'.$mday;
}else{
$time=strtotime($date);
$firstday=date('Y-m-01',strtotime(date('Y',$time).'-'.(date('m',$time)+1).'-01'));
$lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
}
return array($firstday,$lastday);
}
srand((double)microtime()*1000000);//create a random number feed.
$ychar="0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
$list=explode(",",$ychar);
$authnum ="";
for($i=0;$i<6;$i++){
$randnum=rand(0,35); // 10+26;
$authnum.=$list[$randnum];
}
echo $authnum;
//本周一
echo date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)); //w为星期几的数字形式,这里0为周日
//本周日
echo date('Y-m-d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600)); //同样使用w,以现在与周日相关天数算
//上周一
echo date('Y-m-d', strtotime('-1 monday', time())); //无论今天几号,-1 monday为上一个有效周未
//上周日
echo date('Y-m-d', strtotime('-1 sunday', time())); //上一个有效周日,同样适用于其它星期
//本月一日
echo date('Y-m-d', strtotime(date('Y-m', time()) . '-01 00:00:00')); //直接以strtotime生成
//本月最后一日
echo date('Y-m-d', strtotime(date('Y-m', time()) . '-' . date('t', time()) . ' 00:00:00')); //t为当月天数,28至31天
//上月一日
echo date('Y-m-d', strtotime('-1 month', strtotime(date('Y-m', time()) . '-01 00:00:00'))); //本月一日直接strtotime上减一个月
//上月最后一日
echo date('Y-m-d', strtotime(date('Y-m', time()) . '-01 00:00:00') - 86400); //本月一日减一天即是上月最后一日
?>
//round() 例子
//代码如下 复制代码
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
//向下取整floor()
floor();
/*1.丢弃小数部分,保留整数部分
php: intval(7/2)
js:parseInt(7/2)
2.向上取整,有小数就整数部分加1
php: ceil(7/2)
js: Math.ceil(7/2)
3,四舍五入.
php: round(7/2)
js: Math.round(7/2)
4,向下取整
php: floor(7/2)
js: Math.floor(7/2)
*/
//向上取整
//http://watutest/testdate.php
echo $_SERVER['SERVER_NAME'] . "
" ;//watutest
" ;//watutest
echo $_SERVER['PHP_SELF'] . "
" ;///testdate.php
" ;///testdate.php
echo $_SERVER['SERVER_ADDR'] . "
" ;//127.0.0.1
" ;//127.0.0.1
echo $_SERVER['REQUEST_TIME'] . "
" ;//1388124060
" ;//1388124060
echo $_SERVER['DOCUMENT_ROOT'] . "
" ;//D:/wamp/www/hezuozhan/watu.cn/www2
" ;//D:/wamp/www/hezuozhan/watu.cn/www2
echo $_SERVER['SCRIPT_FILENAME'] . "
" ;//D:/wamp/www/hezuozhan/watu.cn/www2/testdate.php
" ;//D:/wamp/www/hezuozhan/watu.cn/www2/testdate.php
echo $_SERVER['SCRIPT_NAME'] . "
" ;///testdate.php
" ;///testdate.php
echo $_SERVER['HTTP_HOST'] . "
" ;//watutest
" ;//watutest
echo $_SERVER['REQUEST_URI'] . "
" ;///testdate.php
" ;///testdate.php
//echo $_SERVER['HTTP_REFERER'] . "
" ;
" ;
//header("Content-type:text/html;chart-ste:UTF-8");
//strpos
if(strpos("abc","a") === false){//为了区分0和false所以用绝对等
echo "strpos--false
";
";
}else{
echo "strpos--true
";
";
}
//substr
echo substr("abcde",2,3)."
";
";
echo substr("abcde",-2,3)."
";
";
echo substr("abcde",3)."
";
";
echo substr_replace("abcde","123",3)."
";
";
echo substr_replace("abcde","123",2,3)."
";
";
echo str_replace("123","@@@","abc123de")."
";
";
/*
cde
de
de
abc123
ab123
abc@@@de
*/
//翻转字符strrev
echo strrev("abcde")."
";//edcba
";//edcba
//array_pop = array_splice(array,-1)
//数组合并array_merge
$a = array("a","b");
$b = array("1","2");
$c = array_merge($a,$b,...);
var_dump($c);
//把数组转化成字符串;
echo join(',',$c)."
";//a,b,1,2
";//a,b,1,2
echo implode(',',$c)."
";//a,b,1,2
";//a,b,1,2
//检查数组是否有某个键
array_key_exists();
//检查数组是否有某值
in_array();
//获得值在数组中的位置
array_search();
array_unshift();//插入数组顶部
end();//获得数组最后一位
//数组排序
sort();//小到大
rsort();//大到小
$str='';
file_put_contents('result.php', $str);
PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述
bcadd — 加法
bccomp — 比较
bcdiv — 相除
bcmod — 求余数
bcmul — 乘法
bcpow — 次方
bcpowmod — 先次方然后求余数
bcscale — 给所有函数设置小数位精度
bcsqrt — 求平方根
bcsub — 减法
/**
* 取get post参数
* @param $key
* @return
*/
function getParam($key)
{
if (isset($_GET[$key])) {
return $_GET[$key];
} elseif (isset($_POST[$key])) {
return $_POST[$key];
} else {
return '';
}
}
//图片截取
if($type =='seal'){
$x = $this->input->post("dx"); //客户端选择区域左上角x轴坐标
$y = $this->input->post("dy"); //客户端选择区域左上角y轴坐标
$w = $this->input->post("dw"); //客户端选择区 的宽
$h = $this->input->post("dh"); //客户端选择区 的高
$im = "";
if(strpos($url,'jpg') || strpos($url,'jpeg')){
$im = imagecreatefromjpeg(".".$url); //这里以jpg图片为例,其他图片要修改这个方法名称,可以上网参考(就是后面那个后缀名不一样)
}elseif(strpos($url,'png')){
$im = imagecreatefrompng(".".$url); // 读取需要处理的图片
}
$newim = imagecreatetruecolor($w, $h); //创建$w*$h的空白图像
imagecopyresampled($newim , $im , 0, 0, $x , $y , $w, $h, $w , $h );
//imagecopy($newim , $im , 0, 0, $x , $y , $w , $h );
$img_name = time().mt_rand(10000,99999).".png";
$p = create_month_dir('./upload/qualification'.'/').$img_name;
//$rs = imagejpeg($newim , $p );
$rs = imagepng($newim , $p );
imagedestroy($im );
imagedestroy($newim );
$url = "/upload/qualification/".date("Ym")."/".$img_name;
}
//##########################socket 发送xml 实例
error_reporting(E_ALL);
set_time_limit(0);
echo "
TCP/IP Connection
\n"; $port = 15999;
$ip = "127.0.0.1";
/*
* +-------------------------------
* @socket连接整个过程
* +-------------------------------
* @socket_create
* @socket_connect
* @socket_write
* @socket_read
* @socket_close
* +--------------------------------
*/
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
} else {
echo "OK.\n";
}
echo "试图连接 '$ip' 端口 '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
} else {
echo "连接OK\n";
}
$str="0 ICC {ReqSeqNo} ERP IBAQ06 {ReqSeqNo} 1 0
$reqSeqNo=date('YmdHis').mt_rand(10000,99999);
$str=str_replace("{ReqSeqNo}",$reqSeqNo,$str);
$in="0".strlen($str);
$newStr= str_pad($in,7," ");
$newStr.=$str;
$in=$newStr;
$out = '';
if (! socket_write($socket, $in, strlen($in))) {
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
} else {
echo "发送到服务器信息成功!\n";
echo "发送的内容为:$in
";
";
}
while ($out = socket_read($socket, 8192)) {
echo "接收服务器回传信息成功!\n";
echo "接受的内容为:", $out;
}
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";
echo "
";
";
/**
* 建立请求,以表单HTML形式构造(默认)
* @param $para 请求参数数组
* @param $method 提交方式。两个值可选:post、get
* @param $button_name 确认按钮显示文字
* @param $type 返回的类型,form表单,url链接
* @param $is_auto 返回form表单时是否自动提交
* @return 提交表单HTML文本
*/
if (!function_exists('build_request_form')) {
function build_request_form($url, $para, $method, $button_name = '', $type = 'form', $is_auto = TRUE, $target = '_self') {
//待请求参数数组
$sHtml = "
$url = trim($url, '?');
$url .= strpos($url, '?') ? '&' : '?';
while (list ($key, $val) = each($para)) {
$sHtml .= "";
$url .= "{$key}=" . ($val) . '&';
}
$url = trim($url, '&');
//submit按钮控件请不要含有name属性
if ($is_auto) {
$sHtml = $sHtml . "";
$sHtml = $sHtml . "";
} else {
$sHtml = $sHtml . "";
}
return $type == 'url' ? $url : $sHtml;
}
}
/**
* 发送post请求
* @param string $url 请求地址
* @param array $post_data post键值对数据
* @return string
*/
public static function send_post($url, $post_data, $is_ssl = 0, $cacert_path = '') {
$postdata = http_build_query($post_data);
// $options = array(
// 'http' => array(
// 'method' => 'POST',
// 'header' => 'Content-type:application/x-www-form-urlencoded',
// 'content' => $postdata,
// 'timeout' => 15 * 60 // 超时时间(单位:s)
// )
// );
// $context = stream_context_create($options);
// $result = file_get_contents($url, false, $context);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_URL, $url);
//https访问
if ($is_ssl) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, $cacert_path);
} else {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//##########################socket 发送xml 实例
/* 1. 类
类的分类有:抽象类(abstract)、密封类(sealed)、静态类(static)
1.1 抽象类
关键字: abstract
使用目的:若所有子类拥有共同的特性,可以把这个特性放到一个抽象类中,子类继承此抽象类。
特点:
1.不能被实例化;ClassName en=new ClassName();//这样会报错。
2.抽象成员必须包含在抽象类中。
3.抽象类除了抽象成员外,还可以包含别的成员(不用关键字 abstract)。
4.子类继承抽象父类后,必须把父类中的所有抽象成员都重写(非抽象成员不必重写)。除非子类也是个抽象类。
5.抽象成员的访问修饰符不能是private。
6.抽象类是有构造函数,虽然不能被实例化。
7.abstract不能用于字段成员,可定义成属性。
8.abstract用于方法时,方法不能定义主体(内容)。
9.抽象类也可以实现接口,但要把接口的成员前面标记个abstract。
1.3 静态类
关键字: static
使用目的:不需要实例化,可以直接类名引用静态方法。比如 工具类。
特点:
1.相似于sealed与abstract使用。
2.静态成员在整个程序退出时才释放资源,所以尽量别写静态字段、属性。最好是静态方法。
2. 接口
关键字: interface
使用目的:抽象类所拥有的共性,也可以概括为:为了多态。
特点:
1.接口中只能包含方法。(方法、属性、索引器、事件)
2.接口中的方法不能有任何实现
3.接口中的成员不能有任何访问修饰符(哪怕是public)
4.接口不能被实例化
5.实现接口的类,必须实现接口的所有成员(这里跟抽象类一样)
6.类不能多继承,所以在某些情况下,只能用接口来代替。接口可以多实现(一个类可以继承多个接口,而只能继承一个类)
7.接口的主要目的就是为了实现多态
8.当一个类,同时继承了某个类,并且也实现了某些接口的时候,必须要将继承的类写在第一个(如果一个类同时继承了父类和接口的时候,要把父类写在最前面)
9.当多个类,都具有某个或某几个功能时(方法),但是这几个类型又不属于相同的系列(这几个类型没有共同的父类,就不能用抽象类。),所以这时,为了实现多态就可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口
10.当父类实现接口,子类继承父类。那么 接口就可以引用子类
11.不要在一个接口中写过多的方法,避免造成接口污染。可编写多个接口,在每个接口中,分别定义方法
12.实现接口方法的时候,不要有override关键字,直接跟平常定义一样
13.接口方法的显示实现,如果多个接口里有相同的方法名。那么第一个方法名默认的引用的是排在最前面的接口,如果要使用后面接口的方法,就要显示实现:接口名.方法名。访问修饰符是private
什么时候把方法放到父类中 还是接口里:
当一个父类派生出5个子类时,所有子类中只有3个需要一个功能,也就是说不是所有的子类都需要此功能,那么就可以把次功能放到一个接口里,各子类进行单独的实现。
接口为了更好的约束子类。 */
?>
/**
* Created by PhpStorm.
* User: qishou
* Date: 15-8-2
* Time: 上午9:12
*/
header("content-type:text/html;charset=utf-8");
$arr = array(3,5,8,4,9,6,1,7,2);
echo implode(" ",$arr)."
";
";
//---------------------------------------
// 常用排序算法
//---------------------------------------
//冒泡排序
function BubbleSort($arr){
$length = count($arr);
if($length<=1){
return $arr;
}
for($i=0;$i<$length;$i++){
for($j=$length-1;$j>$i;$j--){
if($arr[$j]<$arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}
echo '冒泡排序:';
echo implode(' ',BubbleSort($arr))."
";
";
//快速排序
function QSort($arr){
$length = count($arr);
if($length <=1){
return $arr;
}
$pivot = $arr[0];//枢轴
$left_arr = array();
$right_arr = array();
for($i=1;$i<$length;$i++){//注意$i从1开始0是枢轴
if($arr[$i]<=$pivot){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = QSort($left_arr);//递归排序左半部分
$right_arr = QSort($right_arr);//递归排序右半部份
return array_merge($left_arr,array($pivot),$right_arr);//合并左半部分、枢轴、右半部分
}
echo "快速排序:";
echo implode(' ',QSort($arr))."
";
";
//选择排序(不稳定)
function SelectSort($arr){
$length = count($arr);
if($length<=1){
return $arr;
}
for($i=0;$i<$length;$i++){
$min = $i;
for($j=$i+1;$j<$length;$j++){
if($arr[$j]<$arr[$min]){
$min = $j;
}
}
if($i != $min){
$tmp = $arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] = $tmp;
}
}
return $arr;
}
echo "选择排序:";
echo implode(' ',SelectSort($arr))."
";
";
//插入排序
function InsertSort($arr){
$length = count($arr);
if($length <=1){
return $arr;
}
for($i=1;$i<$length;$i++){
$x = $arr[$i];
$j = $i-1;
while($x<$arr[$j] && $j>=0){
$arr[$j+1] = $arr[$j];
$j--;
}
$arr[$j+1] = $x;
}
return $arr;
}
echo '插入排序:';
echo implode(' ',InsertSort($arr))."
";
";
//---------------------------------------
// 常用查找算法
//---------------------------------------
//二分查找
function binary_search($arr,$low,$high,$key){
while($low<=$high){
$mid = intval(($low+$high)/2);
if($key == $arr[$mid]){
return $mid+1;
}elseif($key<$arr[$mid]){
$high = $mid-1;
}elseif($key>$arr[$mid]){
$low = $mid+1;
}
}
return -1;
}
$key = 6;
echo "二分查找{$key}的位置:";
echo binary_search(QSort($arr),0,8,$key);
//顺序查找
function SqSearch($arr,$key){
$length = count($arr);
for($i=0;$i<$length;$i++){
if($key == $arr[$i]){
return $i+1;
}
}
return -1;
}
$key = 8;
echo "
顺序常规查找{$key}的位置:";
顺序常规查找{$key}的位置:";
echo SqSearch($arr,$key);
//---------------------------------------
// 常用数据结构
//---------------------------------------
//线性表的删除(数组实现)
function delete_array_element($arr,$pos){
$length = count($arr);
if($pos<1 || $pos>$length){
return "删除位置出错!";
}
for($i=$pos-1;$i<$length-1;$i++){
$arr[$i] = $arr[$i+1];
}
array_pop($arr);
return $arr;
}
$pos = 3;
echo "
除第{$pos}位置上的元素后:";
除第{$pos}位置上的元素后:";
echo implode(' ',delete_array_element($arr,$pos))."
";
";
/**
* Class Node
* PHP模拟链表的基本操作
*/
class Node{
public $data = '';
public $next = null;
}
//初始化
function init($linkList){
$linkList->data = 0; //用来记录链表长度
$linkList->next = null;
}
//头插法创建链表
function createHead(&$linkList,$length){
for($i=0;$i<$length;$i++){
$newNode = new Node();
$newNode->data = $i;
$newNode->next = $linkList->next;//因为PHP中对象本身就是引用所以不用再可用“&”
$linkList->next = $newNode;
$linkList->data++;
}
}
//尾插法创建链表
function createTail(&$linkList,$length){
$r = $linkList;
for($i=0;$i<$length;$i++){
$newNode = new Node();
$newNode->data = $i;
$newNode->next = $r->next;
$r->next = $newNode;
$r = $newNode;
$linkList->data++;
}
}
//在指定位置插入指定元素
function insert($linkList,$pos,$elem){
if($pos<1 && $pos>$linkList->data+1){
echo "插入位置错误!";
}
$p = $linkList;
for($i=1;$i<$pos;$i++){
$p = $p->next;
}
$newNode = new Node();
$newNode->data = $elem;
$newNode->next = $p->next;
$p->next = $newNode;
}
//删除指定位置的元素
function delete($linkList,$pos){
if($pos<1 && $pos>$linkList->data+1){
echo "位置不存在!";
}
$p = $linkList;
for($i=1;$i<$pos;$i++){
$p = $p->next;
}
$q = $p->next;
$p->next = $q->next;
unset($q);
$linkList->data--;
}
//输出链表数据
function show($linkList){
$p = $linkList->next;
while($p!=null){
echo $p->data." ";
$p = $p->next;
}
echo '
';
';
}
$linkList = new Node();
init($linkList);//初始化
createTail($linkList,10);//尾插法创建链表
show($linkList);//打印出链表
insert($linkList,3,'a');//插入
show($linkList);
delete($linkList,3);//删除
show($linkList);
/**
* Class Stack
* 用PHP模拟顺序栈的基本操作
*/
class Stack{
//用默认值直接初始化栈了,也可用构造方法初始化栈
private $top = -1;
private $maxSize = 5;
private $stack = array();
//入栈
public function push($elem){
if($this->top >= $this->maxSize-1){
echo "栈已满!
";
";
return;
}
$this->top++;
$this->stack[$this->top] = $elem;
}
//出栈
public function pop(){
if($this->top == -1){
echo "栈是空的!";
return ;
}
$elem = $this->stack[$this->top];
unset($this->stack[$this->top]);
$this->top--;
return $elem;
}
//打印栈
public function show(){
for($i=$this->top;$i>=0;$i--){
echo $this->stack[$i]." ";
}
echo "
";
";
}
}
$stack = new Stack();
$stack->push(3);
$stack->push(5);
$stack->push(8);
$stack->push(7);
$stack->push(9);
$stack->push(2);
$stack->show();
$stack->pop();
$stack->pop();
$stack->pop();
$stack->show();
/**
* Class Deque
* 使用PHP实现双向队列
*/
class Deque{
private $queue = array();
public function addFirst($item){//头入队
array_unshift($this->queue,$item);
}
public function addLast($item){//尾入队
array_push($this->queue,$item);
}
public function removeFirst(){//头出队
array_shift($this->queue);
}
public function removeLast(){//尾出队
array_pop($this->queue);
}
public function show(){//打印
foreach($this->queue as $item){
echo $item." ";
}
echo "
";
";
}
}
$deque = new Deque();
$deque->addFirst(2);
$deque->addLast(3);
$deque->addLast(4);
$deque->addFirst(5);
$deque->show();
//PHP解决约瑟夫环问题
//方法一
function joseph_ring($n,$m){
$arr = range(1,$n);
$i = 0;
while(count($arr)>1){
$i=$i+1;
$head = array_shift($arr);
if($i%$m != 0){ //如果不是则重新压入数组
array_push($arr,$head);
}
}
return $arr[0];
}
//方法二
function joseph_ring2($n,$m){
$r = 0;
for($i=2;$i<=$n;$i++){
$r = ($r+$m)%$i;
}
return $r + 1;
}
echo "
".joseph_ring(60,5)."
";
".joseph_ring(60,5)."
";
echo "
".joseph_ring2(60,5)."
";
".joseph_ring2(60,5)."
";