• 顺序表(下)


    一、顺序表的删

    头删:

    1. void SLPopFront(SL* psl)
    2. {
    3. assert(psl);//遇到错误直接报错
    4. int begin = 0;
    5. while (begin < psl->size - 1)
    6. {
    7. psl->a[begin] == psl->a[begin + 1];
    8. begin++;
    9. }
    10. }

    这种方法基本用不到,一般是采用尾删,头删没采用一次就要挪动n个数据,浪费资源。

    尾删:

    1. void SLPopBack(SL* psl)
    2. {
    3. assert(psl);
    4. if (psl->size == 0)
    5. return;
    6. psl->size--;
    7. }

    二、顺序表的插入

    实质上是“增删查改”的增,之所以要弄头增头减是因为那两个经常会用到,单独列出来了。

    1. void SLInsert(SL* psl, size_t pos, SLDataType x)
    2. {
    3. assert(psl);
    4. assert(pos > psl->size);
    5. SLCheckCapacity(psl);
    6. size_t end=psl->size-1;
    7. while (end > pos)
    8. {
    9. psl->a[end] = psl->a[end - 1];
    10. end--;
    11. }
    12. psl->a[pos] = x;
    13. psl->size++;
    14. };

    这里破损用到的是size_t类型,这是一个无符号整数类型,在以后的库的学习中用的还是这个,因此我们现在就应该适应。

    有一些要注意的点,不可 用下面的代码实现这一功能:

    1. int end=psl->size;
    2. while (end >= pos)
    3. {
    4. psl->a[end+1] = psl->a[end];
    5. end--;
    6. }

    这样当pos=0时会导致死循环,原因如下:

    end被整型提升为无符号整数,当end为-1的时候在运算的时候会直接提取内存中的:

    “11111111111111111111111111111111”一个极大的正数

    三、顺序表的查

    如下:

    1. int SLFind(SL* psl, SLDataType x)
    2. {
    3. assert(psl);
    4. for (int i = 0; i < psl->size; i++)
    5. {
    6. if (psl->a[i] == x)
    7. {
    8. return i;
    9. }
    10. }
    11. return -1;
    12. }

    四、顺序表的删

    1. void SLErase(SL* psl, size_t pos)
    2. {
    3. assert(psl);
    4. assert(pos > psl->size - 1);
    5. size_t begin = pos + 1;
    6. while (begin <= psl->size - 1)
    7. {
    8. psl -> a[begin - 1] = psl->a[begin];
    9. begin++;
    10. }
    11. psl->size--;
    12. }

    五、顺序表的改

    1. void SLModify(SL* psl, size_t pos, SLDataType x)
    2. {
    3. assert(psl);
    4. assert(pos < psl->size);
    5. psl->a[pos] = x;
    6. }

     

  • 相关阅读:
    重学 JavaSE 高阶
    leetcode 22. 括号生成
    TouchGFX之二进制字体
    关于LWIP的一点记录(三)
    云原生之K8S------K8S持久化存储PV、PVC
    Thread同步问题,小案例
    linux软件安装
    青云科技雷万钧:使用 Notification Manager 构建云原生通知系统
    linux中35个find案例
    Python多线程技巧心得详解
  • 原文地址:https://blog.csdn.net/qq_64484137/article/details/126200614