码迷,mamicode.com
首页 > 其他好文 > 详细

顺序表例题

时间:2017-09-15 18:39:03      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:temp   删除   include   有一个   []   大于   delete   整数   引入   

1.顺序表原地逆置 

function Reverse(&$sqList) {
    $head = 0; //
    $len = count($sqList);
    $rear = $len - 1; //
    $temp = ‘‘;
    for ($head = 0; $head < $len && $head < $rear; $head++, $rear--) { 
        $temp = $sqList[$head];
        $sqList[$head] = $sqList[$rear];
        $sqList[$rear] = $temp;
    }
}
// 也可以使用PHP自带的array_reverse()函数,但是这个函数会把最终的结果返回,原数组不变

 

2.Josephus问题

function Josephus1($len, $start, $num) {
    /* 顺序表初始化 */
    $people = [];
    for($i = 0; $i < $len; $i++) {
        $people[$i] = $i + 1;
    }    
    $order = [];
    $count = count($order);
    $index = $start - 1;// 数组下标
    $flag = 0; // 指针
    /**
     * 每次出去一个元素 $count加1,当count == 数组长度的时候结束循环     
     */
    while($count < $len) {
        if($people[$index] != 0) { // 首先从起始位置开始
            $flag++; // 指针下移
        }
        if($flag == $num) { // 偏移量到指定的
            $flag = 0; // 指针归位
            $order[] = $people[$index];
            $count++;
            $people[$index] = 0;
        }
        $index++;
        if($index == $len) { // 遍历顺序表到头,重新再次遍历
            $index = 0;
        }
    }
    return $order;
}

 

3.假定数组A中有多个零元素,试写出一个函数,将A中所有的非零元素依次移动到数组A的前端A[i](o<=i && i<=数组长度 )

function removeToHead(&$arr) {
    $len = count($arr);
    for ($i = 0, $j = 0; $i < $len; $i++) { 
        if ($arr[$i] != 0) {
            $temp = $arr[$j]; // 要移动开的位置
            $arr[$j] = $arr[$i];
            $arr[$i] = $temp;
            $j++;
        } else {
            continue;
        }        
    }
}

 

4.编写函数,将有一个n个非零元素的整数一维数组A[n]拆分成两个一维数组,使得A[]中大于零的元素存放在B[]中,小于0的元素存放在C[]中

/**
 * 数组拆分
 * @param array $A 待拆分的数组
 * @return array $res 二维数组
 */
function takePartZero($A) {
    // 查找非0元素的位置
    $index = array_filter($A, function($e){
        return $e != 0;
    });
    $index = array_keys($index);
    // 查找大于0元素的位置
    $bigger = array_filter($A, function($e) {
        return $e > 0;
    });
    $bigger = array_keys($bigger);
    // 查找小于0元素的位置
    $smaller = array_keys(array_filter($A, function($e){
        return $e < 0;
    }));
    // 存放结果
    $res = [];
    $res[‘B‘] = [];
    $res[‘C‘] = [];
    foreach ($bigger as $v) {
        $res[‘B‘][] = $A[$v];
    }
    foreach ($smaller as $v) {
        $res[‘C‘][] = $A[$v];
    }
    return $res;
}

 

5.已知在一维数组A[m+n]中依次存放着两个线性表(a0, a1, a2.....am-1)和(b0, b1, b2, ......bn-1)。尝试编写一个函数,将数组中的两个顺序表的位置互换

/**
 * 顺序表位置互换
 * @param array $A 存放着两个顺序表的数组
 * @param int $m 第一个线性表的长度
 * @param int $n 第二个线性表的长度
 * @return array 位置互换之后的数组
 */
function listReverse($A, $m, $n) {
    include ‘SqList.class.php‘; // 引入自己写的顺序表类
    $sqList = new sqList($A);
    $len = count($A);
    for ($i=$m, $j=1; $i < $len; $i++, $j++) { 
        $temp = $A[$i];
        // 删除
        $sqList->listDelete($i+1); // 注意删除的是从1开始    
        // 插入
        $sqList->listInsert($j, $temp);        
    }
    return $sqList->list;
}

 

顺序表例题

标签:temp   删除   include   有一个   []   大于   delete   整数   引入   

原文地址:http://www.cnblogs.com/rwqzcq/p/7500754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!