• 线性表的插入、删除和查询操作


    线性表的插入、删除和查询操作

    1、定义线性表

    定义一个线性结构,有列表默认长度设置为50,列表数量

    #include 
    #define MaxSize 50
    
    typedef int Element;
    typedef struct{
        Element data[MaxSize];
        int length;
    }SqList;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、顺序表插入

    插入顺序表

    第一步:判断是否符合插入,插入的数据不能超过顺序表的长度

    第二部:如何进行插入,可以这样理解,顺序表要插入,之前的数据肯定都是要向后移动的,所以直接从最后一个元素向后移动,不能从插入的位置向后移动,不然会把之后的元素覆盖,这样就找不到了,所以结束条件是到插入的位置,遍历循环是减减

    第三步:插入之后,顺序表的长度增加了

    #include 
    
    #define MaxSize 50
    
    typedef int Element;
    typedef struct{
        Element data[MaxSize];
        int length;
    }SqList;
    
    bool SqListInsert(SqList &L,Element position,Element num)
    {
        if(position<1 || position>L.length){
            return false;
        }
        for(int i=L.length;i>=position;i--){
            L.data[i] = L.data[i-1];
        }
        L.data[position-1] = num;
        L.length++;
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3、顺序表打印

    为了后面看到是否插入成功,可以写一个遍历打印顺序表元素

    #include 
    //定义固定大小
    #define MaxSize 50
    //类型重命名
    typedef int Element;
    //定义struct并命名
    typedef struct{
        Element data[MaxSize];
        int length;
    }SqList;
    //顺序表插入
    bool SqListInsert(SqList &L,Element position,Element num)
    {
        if(position<1 || position>L.length){
            return false;
        }
        for(int i=L.length;i>=position;i--){
            L.data[i] = L.data[i-1];
        }
        L.data[position-1] = num;
        L.length++;
        return true;
    }
    //顺序表打印
    void SqListPrint(SqList L)
    {
        for(int i = 0;i
    • 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

    4、顺序表插入执行

    主函数进行测试顺序表插入是否正确

    #include 
    //定义固定大小
    #define MaxSize 50
    //类型重命名
    typedef int Element;
    //定义struct并命名
    typedef struct{
        Element data[MaxSize];
        int length;
    }SqList;
    //顺序表插入
    bool SqListInsert(SqList &L,Element position,Element num)
    {
        if(position<1 || position>L.length){
            return false;
        }
        for(int i=L.length;i>=position;i--){
            L.data[i] = L.data[i-1];
        }
        L.data[position-1] = num;
        L.length++;
        return true;
    }
    //顺序表打印
    void SqListPrint(SqList L)
    {
        for(int i = 0;i
    • 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
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    执行结果如下
    在这里插入图片描述

    5、顺序表删除

    同插入差不多,删除顺序表如下

    第一步:判断是否符合删除条件,删除的位置是要在顺表的长度之内的

    第二部:如何进行删除,可以这样理解,顺序表要删除,之后的数据肯定都是要向前移动的,所以直接从要删除位置开始向前移动,不能从最后的位置向前移动,不然会把之前的元素覆盖,这样就找不到了,所以结束条件是到最后长度的位置,遍历循环是加加

    第三步:删除之后,顺序表的长度减少了

    #include 
    //定义固定大小
    #define MaxSize 50
    //类型重命名
    typedef int Element;
    //定义struct并命名
    typedef struct{
        Element data[MaxSize];
        int length;
    }SqList;
    //顺序表插入
    bool SqListInsert(SqList &L,Element position,Element num) 会改变SqList,需要引用
    {
        if(position<1 || position>L.length){
            return false;
        }
        for(int i=L.length;i>=position;i--){
            L.data[i] = L.data[i-1];
        }
        L.data[position-1] = num;
        L.length++;
        return true;
    }
    // 顺序表表删除
    bool SqListDelete(SqList &L,ElemType position,ElemType &del) //SqList &L是因为会改变SqList,需要引用;ElemType &del要保存删除的具体数据并输出
    {
        if(position<1 || position>L.length){
            return false;
        }
        del = L.data[position - 1];
        for (int i = position; i < L.length; i++) {
            L.data[i - 1] = L.data[i];
        }
        L.length--;
        return true;
    }
    //顺序表打印
    void SqListPrint(SqList L)
    {
        for(int i = 0;i

6、顺序表删除执行

主函数进行测试顺序表删除是否正确

#include 
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{
    Element data[MaxSize];
    int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num)
{
    if(position<1 || position>L.length){
        return false;
    }
    for(int i=L.length;i>=position;i--){
        L.data[i] = L.data[i-1];
    }
    L.data[position-1] = num;
    L.length++;
    return true;
}
//顺序表打印
void SqListPrint(SqList L)
{
    for(int i = 0;i

执行结果如下

在这里插入图片描述

7、顺序表查询

查询就比较简单,进行遍历循环是否相等就可以,这里我们不进行有重复的元素

#include 
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{
    Element data[MaxSize];
    int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num) 会改变SqList,需要引用
{
    if(position<1 || position>L.length){
        return false;
    }
    for(int i=L.length;i>=position;i--){
        L.data[i] = L.data[i-1];
    }
    L.data[position-1] = num;
    L.length++;
    return true;
}
// 顺序表表删除
bool SqListDelete(SqList &L,ElemType position,ElemType &del) //SqList &L是因为会改变SqList,需要引用;ElemType &del要保存删除的具体数据并输出
{
    if(position<1 || position>L.length){
        return false;
    }
    del = L.data[position - 1];
    for (int i = position; i < L.length; i++) {
        L.data[i - 1] = L.data[i];
    }
    L.length--;
    return true;
}
// 顺序表查找
int SqListQuery(SqList L, ElemType num) //ElemType num要查看的具体数据
{
    for(int i = 0;i

8、循序表查询执行

主函数进行测试顺序表查询是否正确

#include 
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{
    Element data[MaxSize];
    int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num)
{
    if(position<1 || position>L.length){
        return false;
    }
    for(int i=L.length;i>=position;i--){
        L.data[i] = L.data[i-1];
    }
    L.data[position-1] = num;
    L.length++;
    return true;
}
//顺序表打印
void SqListPrint(SqList L)
{
    for(int i = 0;i

结果如下
在这里插入图片描述

  • 相关阅读:
    高性能零售IT系统的建设07-通过一次重大危机感受Redis从使用到失智到理性的治理
    2022-08-06 学习日记(27th day)集合框架---Map
    iOS Bug 收集
    解决ODOO12 恢复数据库提示内存不够报错
    Python Web3.0应用开发【2022】
    区间信息维护与查询
    面试题--SpringBoot
    【方案】基于5G智慧工业园区解决方案(PPT原件)
    微擎模块 家政服务小程序V2.7.1全开源解密版,一款专注于家政O2O行业的家政服务类小程序源码
    银行互联网类业务基于分布式存储的架构设计与实施运维分享
  • 原文地址:https://blog.csdn.net/Sdhrs_nn/article/details/133847742