顺序表例题

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;
}
时间: 2024-10-15 00:16:44

顺序表例题的相关文章

顺序表算法设计笔记

1.已知长度为 n 的线性表 A 采用顺序存储结构.设计一个时间复杂度为O(n).空间复杂度为O(1)的算法,该算法删除线性表中所有值为 x 的元素数据元素. 以下两种方法都不满足要求: 如果删除一个值为 x 的元素都进行移动, 其时间复杂度为O(n^2),时间复杂度为O(1). 如果借助一个新的顺序表, 存放将A中所有不为x的元素,其时间复杂度O(n), 空间复杂度为O(n). 解法一:设删除 A 中所有值等于 x 元素后的顺序表为A1, 显然A1包含在 A 中, 为此A1重用 A 的空间.

2、顺序表

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 从这节开始,以后的每一篇博文均会只描述一种结构.这节要解决的是有关顺序表的问题,下面就是一些顺序表的基本的知识点: 1. 顺序表其实就是线性表的一种,它除开始节点和结束节点之外的其他节点,均有且只有一个直接前趋和一个直接后继,开始 节点只有一个后继节点,结束节点只有一个前趋节点. 2. 用顺序存储方法存储的线性表就称为顺序表. 3. 顺序存储方法就是将表的节点按逻辑上的次序依次的存放在一组连续的内存单元中,这里是指在逻辑上连续排列,在

顺序表查找和有序表查找

查找里面顺比表查找和有序表查找(包括二分查找,插值查找,斐波那契查找)比较简单,直接贴代码,代码里面有详细注释. 1 #include <iostream> 2 using namespace std; 3 4 //顺序表查找(线性查找.静态表查找) 时间复杂度为O(n) 5 int Seq_Search(int *s,int n,int key) 6 { 7 s[0] = key; //设置了一个哨兵,避免了每次比较一次过后都要判断查找位置是否越界 8 int i = n; 9 while

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

模板实现顺序表

类模板的成员函数: 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板的成员函数具有和模板相同的模板参数.因此,在=定义在类模板之外的成员函数就必须以template开始,后跟类模板参数列表. 类模板中的友元函数: 类模板中的友元函数,应该在类中定义.若只在类中声明,在类外定义,则在链接时会出现错误. 类模板实现顺序表: "SeqList.h" //冒泡法 "test.cpp"

顺序表

#include <cstdio> #include <cstring> ///都用c语言写的 #include <iostream> ///建议从主函数开始看 #include <cstdlib> using namespace std; int sequence_map[1000]; int total_sequence = 0; void init_sequence() ///主界面. ///一级菜单中顺序表的操作界面 init初始化 { printf

顺序表的非递减数列合并

#include<stdio.h> /*包含输入输出头文件*/ #define ListSize 100 typedef int DataType; typedef struct { DataType list[ListSize]; int length; }SeqList; void InitList(SeqList *L) /*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/ { L->length=0; /*把线性表的长度置为0*/ } int ListEmpt

顺序表(存在问题)

#include <iostream> using namespace std; typedef int DataType; struct SeqList { int MAXNUM; int n; DataType *element; }; typedef struct SeqList *PSeqList; PSeqList createEmptySeq(int m) { PSeqList palist = (PSeqList) malloc (sizeof (struct SeqList))

稀疏矩阵的三元组顺序表的C语言实现

对于没有排序功能的集合来说,都可以使用java.util.Collections.sort()方法进行排序,它除了集合对象以外,还需要提供一个比较器.如果列表中的元素全部都是相同的类型,并且这个类实现了Comparable接口,就可以简单的调用Collections.sort()方法,如果这个类没有实现comparable接口,那么可以创建一个比较器传递一个Comparator实例作为Sort()的第二个参数进行排序,另外,如果不想使用默认的分类顺序进行排序,同样也可以传递一个Comparato