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

【数据结构】2-2-2 顺序表的插入删除查找

数据结构知识点合集

  • 知识点

  • 顺序表的插入

ListInsert(&L,i,e)插入操作。在表L中的第i个位置上插入指定元素e。

/*在顺序表L的第i个位置插入元素e*/
bool ListInsert(SqList &L,int i,int e)
{/*判断i的范围是否有效*/if(i<0||i>L.length)return false;/*判断是否有空间能够插入*/if(L.length>=MaxSize)return false;/*将第i个元素及其后面的元素后移*/for(int j=L.length;j>=i;j--)L.data[j]=L.data[j-1];/*在顺序表的第i个位置插入元素e*/L.data[i-1]=e;/*顺序表的长度加一*/L.length++;/*插入成功,返回true*/return true;
}

顺序表插入操作时间复杂度分析:

最好情况:新元素插入到表尾,不需要移动元素i = n+1,循环0次;最好时间复杂度 = O(1)

 

最坏情况:新元素插入到表头,需要将原有的 n 个元素全都向后移动i = 1,循环 n 次;最坏时间复杂度 = O(n);

 

平均情况:假设新元素插入到任何一个位置的概率相同,即 i = 1,2,3, … , length+1 的概率都是 p = 1/(n+1)

                  i = 1,循环 n 次;i=2 时,循环 n-1 次;i=3,循环 n-2 次 …… i =n+1时,循环0次

                平均循环次数 = np + (n-1)p + (n-2)p + …… + 1⋅p =[n(n+1)/2] * [1/(n+1)] = n/2  平均时间复杂度 = O(n)

  • 顺序表的删除

ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。

/*将顺序表第i个位置的元素删除,并将删除元素值记录*/
bool ListDelete(SeqList &L,int i,int &e)
{/*判断i的范围是否有效*/if(i<0||i>L.length)return false;/*将被删除的元素赋值给e*/e=L.data[i-1];/*将第i个位置后的元素前移*/for(int j=i;j<L.length;j++)L.data[j-1]=L.data[j];/*顺序表的长度减一*/L.length--;/*删除成功,返回true*/return true;
}

顺序表删除操作时间复杂度分析:

最好情况:删除表尾元素,不需要移动元素i = n,循环0次;最好时间复杂度 = O(1)

 

最坏情况:删除表头元素,需要将原有的 n 个元素全都向前移动;i = 1,循环 n 次;最坏时间复杂度 = O(n);

 

平均情况:假设删除任何一个元素的概率相同,即 i = 1,2,3, … , length+1 的概率都是 p = 1/n

                 i = 1,循环 n-1 次;i=2 时,循环 n-2次;i=3,循环 n-3 次 …… i =n时,循环0次

                平均循环次数 = (n-1)p + (n-2)p + …… + 1⋅p =[n(n-1)/2] * [1/n] = (n-1)/2  平均时间复杂度 = O(n)

  • 顺序表的按位置查找

/*在顺序表L中查找第i个元素并返回其值*/
int GetElemByPosition(SeqList L,int i)
{return L.data[i-1];
}

由于顺序表的各个数据元素在内存中连续存放,因此可以根据起始地址和数据元素大小立即找到第 i 个元素(随机存取)

时间复杂度:O(1)

  • 顺序表的按值查找

/*在顺序表L中查找值为e的元素并返回其位置*/
int GetElemByValue(SeqList L,int e)
{for(int i=0;i<L.length;i++){if(L.data[i]==e)return i+1;}/*查找失败,返回0*/return 0;
}

最好情况:目标元素在表头循环1次;最好时间复杂度 = O(1)

 

最坏情况:目标元素在表尾;循环 n 次;最坏时间复杂度 = O(n);

 

平均情况:假设目标元素出现在任何一个位置的概率相同,都是 1/n;目标元素在第1位,循环1次;在第2位,循环2

                次;…… ;在第 n 位,循环 n 次;平均循环 次数=(1+2+3+…+n)*(1/n)=(n+1)/2;平均时间复杂度 = O(n)

相关文章:

  • 【Linux高级全栈开发】2.1.3 http服务器的实现
  • ngx_http_proxy_protocol_vendor_module 模块
  • FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台,用的在线的ASR和TTS
  • STM32SPI通信基础及CubeMX配置
  • 从零开始实现大语言模型(十五):并行计算与分布式机器学习
  • symfonos: 1靶场
  • 算法第21天 | 第77题. 组合、216. 组合总和 III、17. 电话号码的字母组合
  • React方向:react的基本语法-数据渲染
  • API 玩出新花样:我如何构建自己的智能翻译助手
  • 08 Nginx模块
  • 【Docker】Docker Compose方式搭建分布式协调服务(Zookeeper)集群
  • Text2SQL:自助式数据报表开发---0517
  • Java求职者面试:从Spring Boot到微服务的技术点解析
  • 【GESP】C++三级真题 luogu-B3925 [GESP202312 三级] 小猫分鱼
  • 【PostgreSQL系列】PostgreSQL 复制参数详解
  • MLLM常见概念通俗解析(四)
  • 项目的部署发布和访问的流程
  • Jsoup库和Apache HttpClient库有什么区别?
  • 嵌入式学习笔记 - U(S)ART 模块HAL 库函数总结
  • [C++面试] const相关面试题
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?
  • 商务部:对原产于美国、欧盟、台湾地区和日本的进口共聚聚甲醛征收反倾销税
  • 特写|银耳种植“北移”到沧州盐山,村民入伙可年增收4万元
  • 缅甸发生5.0级地震
  • 2025全球城市科技传播能力指数出炉,上海位列第六
  • 纪念|脖子上挂着红领巾的陈逸飞