当前位置: 首页 > news >正文

84.【C语言】数据结构之顺序表的头部插入和删除

目录

3.操作顺序表

1.分析头部插入函数

SeqList.c写入

容量检查函数

注意

main.c改为

SeqList.h添加SLPushFront的声明

运行结果

2.分析头部删除函数

SLPopFront代码

main.c改为

SeqList.h添加SLPopFront的声明

图分析

运行结果


承接83.【C语言】数据结构之顺序表的尾部插入和删除文章

3.操作顺序表

1.分析头部插入函数

SeqList.c写入

void SLPushFront(SL* ps,SLDataType x)
{assert(ps);SLCheckCapacity(ps);int end = ps->size-1;//定义尾部,一开始a[end-1]指向最后一个元素while (end >= 0)//注意循环条件{ps->a[end + 1] = ps->a[end];end--;}ps->a[0] = x;ps->size++;
}

容量检查函数

void SLCheckCapacity(SL* ps)
{assert(ps);if (ps->size == ps->capacity){SLDataType* tmp = (SLDataType*)realloc(ps->a, sizeof(SLDataType) * ps->capacity * 2);if (tmp == NULL){perror("realloc");return;//错误返回}ps->capacity *= 2;ps->a = tmp;}
}

注意

头插时,元素会逐个向后移动,因此要先进行容量检查,再移动元素,最后不要忘记为有效元素个数size+1;

main.c改为

#include "SeqList.h"
//定义测试顺序表的函数
void TestSeqList1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPrint(&s);SLPushFront(&s, 1);SLPrint(&s);SLDestory(&s);
}int main()
{TestSeqList1();return 0;
}

SeqList.h添加SLPushFront的声明

运行结果

头插N个元素的时间复杂度为O(N^2),运行效率不高,尽量避免头插,使用尾插(尾插N个元素的时间复杂度为O(N))

2.分析头部删除函数

SLPopFront代码

void SLPopFront(SL * ps)
{assert(ps);assert(ps->size);int begin = 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}

注:ps->size可能为负数,因此要断言ps->size的正负

main.c改为

void TestSeqList1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPushBack(&s, 5);SLPrint(&s);SLPopFront(&s);SLPrint(&s);SLDestory(&s);
}

SeqList.h添加SLPopFront的声明

图分析

运行结果


http://www.mrgr.cn/news/53611.html

相关文章:

  • 人工智能(四)-大模型搭建
  • leetcode动态规划(十二)-最后一块石头的重量
  • JavaSE:15、集合类
  • MySQL关于DAYOFWEEK和WEEKDAY说明
  • nosql课本习题
  • 详细尝鲜flutter
  • 医疗领域的RAG技术:如何通过知识图谱提升准确性
  • vb操作电子表格 文件夹内多表格 提取数据 在生成一个新表格
  • Leetcode—192. 统计词频【中等】(Shell)
  • 【树莓派】树莓派搭建个人服务器
  • Qt之QObject
  • Java并发编程深度解析:从基础到实战
  • Shades of Gray 算法
  • 问:MySQL数据库存储引擎及对应的锁有哪些?
  • ​AI Sketchnotes Generator——解锁创意表达的新方式
  • 83.【C语言】数据结构之顺序表的尾部插入和删除
  • C语言 | Leetcode C语言题解之第493题翻转对
  • [实时计算flink]DataStream连接器设置方法
  • 骑砍霸主MOD天芒传奇Ⅱ·前传-序章
  • Cuda By Example - 8 (性能测量)
  • ChatGPT的150个角色提示场景实测(17)营养师
  • 一天认识一个硬件之路由器
  • MobaXterm 中文乱码
  • 22 linux 进程管理进程间通信
  • 【JAVA毕业设计】基于Vue和SpringBoot的图书个性化推荐系统
  • pip安装sentence-transformers时的一些报错记录以及Python汉字转拼音cleverdeng/pinyin.py程序的调整处理