• 顺序表与链表(下)


    目录

    引言

    查找接口

    固定位置插入接口

    固定位置删除接口

    修改接口


    引言

    在顺序表与链表(上),我们讲了什么是线性表、顺序表和链表,以及重点讲了 顺序表的几个接口:顺序表初始化、销毁、头增尾增,头删尾删。

    在(下)中,我们讲顺序表的剩余几个接口:查找、固定位置插入、固定位置删除、修改。

    查找接口:

    查找接口非常简单,只需要遍历顺序表找到对应数据就行了。

    代码如下:

    1. //test.c
    2. int ret = SeqFind(&s, 3);
    3. printf("\n%d\n", ret);
    4. //Seqlist.c
    5. int SeqFind(SEQ* pq, SeqDateType x)
    6. {
    7. assert(pq);
    8. for (int i = 0; i < pq->size; ++i)
    9. {
    10. if (pq->a[i] == x)
    11. {
    12. return i;
    13. }
    14. }
    15. return -1;
    16. }

    注意这里返回类型是int,找到了对应数据返回的数据的下标,没找到就return -1;

    打印出来观察结果。

    固定位置插入接口:

    与头插尾插不同的是,需要传参给定插入的位置,注意给定的是下标。

    其他地方与头插相似,只是要注意挪动数组的起始位置变成了插入位置pos

    代码如下:

    1. /SeqList.c
    2. void SeqInsert(SEQ* pq, int pos, int x)
    3. {
    4. assert(pq);
    5. assert(pos >= 0 && pos < pq->size - 1);
    6. SeqCheckFull(pq);
    7. int end = pq->size - 1;
    8. while (end >= pos)
    9. {
    10. pq->a[end + 1] = pq->a[end];
    11. end--;
    12. }
    13. pq->a[pos] = x;
    14. pq->size++;
    15. }

    固定位置删除接口:

    较之插入相对容易,也是一样注意删除位置以及挪动数组起始位置改变就行了。

    代码如下:

    1. void SeqErase(SEQ* pq, int pos)
    2. {
    3. assert(pq);
    4. assert(pos >= 0 && pos < pq->size - 1);
    5. int begin = pos;
    6. while (begin < pq->size - 1)
    7. {
    8. pq->a[begin] = pq->a[begin + 1];
    9. begin++;
    10. }
    11. pq->size--;
    12. }

    可以发现,固定位置插入、删除较之之前说的头插头删,尾插尾删有更广泛的特点。

    可以在头上插入、中间插入,也可以尾部插入,删除也一样,所以上面的头插头删,尾插尾删代码也可以相应的更改为这种普遍的方法,直接调用下面的固定插入、删除函数就行了。

    在这里就不赘述了,相信大家自己也很清楚了。

    修改接口:

    这也是非常容易的,无非就是给个下标,修改对应数据。

    代码如下:

    1. void SeqModify(SEQ* pq, int pos, int x)
    2. {
    3. assert(pq);
    4. assert(pos >= 0 && pos < pq->size - 1);
    5. pq->a[pos] = x;
    6. }

    链表内容相对较多,放到之后再说吧。祝大家万事顺遂!!

  • 相关阅读:
    50.Python-web框架-Django中引入静态的bootstrap样式
    QML21、常规组件Window
    14:00面试,14:08就出来了 ,问的实在是太...
    CsPbCl3钙钛矿量子点CsPbCl3 QDs发射波长410±10nm
    直接激光雷达里程计:基于稠密点云的快速定位
    如何理解Linux字符设备驱动?
    STL中最常见的三种容器vector、list、map对比分析
    硬件视频会议升级方案
    2023年中职“网络安全“—Web 渗透测试②
    Redis Java 开发简单示例
  • 原文地址:https://blog.csdn.net/SAKURAjinx/article/details/125546752