前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于c语言)
0.对于顺序表中的n个元素,如果在下标i的位置之前插入一个元素,则需要将后面n-i个元素向后移动一位;如果是删除下标为i处的元素,则是则需要将后面n-i-1个元素向前移动一位。如果说在i的位置插入和删除的概率为p1i,p2i,插入平均移动数:Σ(n-i)p1i;删除平均移动数:Σ(n-i-1)p2i;然后又假设每一点删除和插入的概率相同,则p1i = 1/(n+1),p2i = 1/n。(一开始看到书上这么写我还在想为什么是n+1不是n,然后又看了看插入的实现,发现是插入的下标是从0到n变化的,当为n的时候就是在末尾加上一个数。所以是n+1)然后求和得到时间代价都是O(n)级别。也就是说顺序表对于处理经常要插入和删除的数据会比较吃力,这也是为后面引出链表做铺垫,历史的车轮总是向前的嘛。
1.顺序表的扩展:在前面实现插入的方法时,我们会判断palist->n >= palist->MAXNUM;就是判断里面的数据有没有超过我们规定的数据数量。在那个程序中,我们会打印出OVERFLOW,然后退出。那我们又有一种扩展的方法,从而容纳更多的数据。
//原先代码
print("OVERFLOW!!!");
return 0; //更改为
pos = (DataType *)malloc(sizeof(DataType)*2*MAXNUM);
if (pos == NULL){
printf("OVERFLOW!!!");
return 0;
}
for (int q=0; q<palist->MAXNUM; q++){
pos[q] = palist->element[q];
}//将已经满了的数据装进新申请的空间
free(palist->element)//释放palist->element申请的内存
palist->element = pos//将指向顺序表的指针指向新建的内存区域
return 1;
2.另一个插入方法int insertPost_seq(PSeqList palist,int p,DataType x){}
在palist所指的顺序表中,下标为p的元素之后,插入一个值为x的元素,返回插入成功与否的标志。
int insertPost_seq(PSeqList palist,int p,DataType x){
if (palist->n >= palist->MAXNUM){
printf("OVERFLOW!!");
return 0;
} //插入的两个退出条件
if (p<0 || p>n){
printf("WRONGNUM");
return 0;
}
for (int q=palist->n-1;q>p;q--){
palist->element[q+1] = palist->element[q];
}
palist->element[p+1] = x;
palist->n = palist->n + 1;
return 1;
}
3.另一种删除方式,前面的已经将根据下标删除给出,这一个是给出值删除顺序表中对应的值(只删除第一个遇到的相同的)。利用前面的定位方法。
int deleteV_seq(PSeqList palist,DataType x){
int q = locate_seq(palist,x);
if(q == -1){
printf("NOTFIND");
return 0;
}
delete_seq(palist,q);
return 1;
}
-1:顺序表到此为止,后续会给出老师布置的顺序表的作业以及相应代码。
前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于c语言)的更多相关文章
- C语言实现顺序表(顺序存储结构)
顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...
- 数据结构Java实现02----线性表与顺序表
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 顺序表----java实现
最简单的数据结构--顺序表,此处以数组为例. 顺序表的优点:支持随机读取,内存空间利用率高. 顺序表的缺点:1.需要预先给出最大数据元素个数,这往往很难实现. 2.插入和删除时需要移动大量数据. Se ...
- 数据结构Java实现01----线性表与顺序表
一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表
在学习之前,先说下我的软件情况,操作系统是manjaro linux 今天刚刚升级的,编辑器是vim8.0.55,编译器是gcc 6.2.1,调试器是gdb 7.12,版本再低点也可以,只要gcc版本 ...
- c++顺序表基本功能
头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...
- 数据结构:顺序表(python版)
顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...
随机推荐
- SQL注入的原理及一般步骤
原理 SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后该字符串传递到SQL Server的实例以进行分析和执行.任何构成SQL语句的过程都应进行注入检查,因为SQL Serv ...
- PHP面试笔试宝典
PHP面试笔试宝典 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. PHP题目 一.单例模式是在应用程序中最多 ...
- Kinect v2 + WPF获取RGB与Depth图像
date: 2017-09-04 14:51:07 Kinect V2的Depth传感器采用的是「Time of Flight(TOF)」的方式, 通过从投射的红外线反射后返回的时间来取得Depth信 ...
- Solution -「LOCAL」模板
\(\mathcal{Description}\) OurOJ. 给定一棵 \(n\) 个结点树,\(1\) 为根,每个 \(u\) 结点有容量 \(k_u\).\(m\) 次操作,每次操作 ...
- 使用docker部署awx-1.7.1.0(ansible图形化界面)
文章目录 关于环境 下载awx 下载安装所需依赖 安装docker-compose 配置inventory文件 出现的报错 TASK [local_docker : Run migrations in ...
- centos7.+系统,mysql主从部署
两台服务器或者两个虚拟机 主库:master IP:192.168.85.152 从库:slave IP:192.168.85.153 关闭主库防火墙或者放行mysql的3306端口, ...
- (翻译) CAP 理论 FAQ
CAP 理论 FAQ 0. 关于这个文档 没有其它比CAP理论更引人注意的话题了, 这个FAQ的目的, 是说明对于CAP, 当前哪些是已知的, 并帮助那些刚接触这个理论的人快速了解, 并解决一些错误的 ...
- 领导满意,客户喜欢的数据报表怎么做,交给Smartbi!
财务分析是以会计核算和报表资料及其他相关资料为依据,采用一系列专门的分析技术和方法,对企业等经济组织过去和现在有关筹资活动.投资活动.经营活动.分配活动的盈利能力.营运能力.偿债能力和增长能力状况等进 ...
- Docker遇到的一些问题和感想
Docker 是"不可变"架构. 当你希望改变一个服务的时候(比如更新版本.修改配置.开放端口),不允许直接登录到服务器上改变某个文件,而是应该把这个服务整个删掉,然后替换成新的版 ...
- SQL Server Cross/Outer Apply
SQL Server2005引入了APPLY运算符,它非常像连接子句,它允许两个表达式直接进行连接,即将左/外部表达式和右/内部表达式连接起来. CROSS APPLY(类比inner join)和O ...