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语言)的更多相关文章

  1. C语言实现顺序表(顺序存储结构)

    顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...

  2. 数据结构Java实现02----线性表与顺序表

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. 顺序表----java实现

    最简单的数据结构--顺序表,此处以数组为例. 顺序表的优点:支持随机读取,内存空间利用率高. 顺序表的缺点:1.需要预先给出最大数据元素个数,这往往很难实现. 2.插入和删除时需要移动大量数据. Se ...

  4. 数据结构Java实现01----线性表与顺序表

    一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...

  5. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  6. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  7. 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表

    在学习之前,先说下我的软件情况,操作系统是manjaro linux 今天刚刚升级的,编辑器是vim8.0.55,编译器是gcc 6.2.1,调试器是gdb 7.12,版本再低点也可以,只要gcc版本 ...

  8. c++顺序表基本功能

    头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...

  9. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

随机推荐

  1. python办公自动化系列之金蝶K3自动登录(二)

    接上一篇博文python办公自动化系列之金蝶K3自动登录(一),我们接着聊聊利用python脚本实现金蝶K3 Wise客户端自动登录这一需求. 如上图所示,自动选择[组织机构]后,我们还需要驱动[当前 ...

  2. 如何快速为团队打造自己的组件库(下)—— 基于 element-ui 为团队打造自己的组件库

    文章已收录到 github,欢迎 Watch 和 Star. 简介 在了解 Element 源码架构 的基础上,接下来我们基于 element-ui 为团队打造自己的组件库. 主题配置 基础组件库在 ...

  3. AI 神经网络理解

    神经网络理解 原文写于2019-12-05,2021-12-08改为markdown

  4. 虚拟机搭建web服务器

    下载CentOS镜像 下载网址:阿里云镜像 选择版本(这里我使用的7) 选择isos/ 选择Minimal.iso,这个版本是最小镜像安装:没有图像界面 只有命令行 将CentOS安装到VM16中 注 ...

  5. 网页外部注入vConsole调试

      概要 本篇介绍一种十分方便的方法为网站添加 vConsole 调试(通过篡改请求外部注入的方式,不需要您是网站的拥有者,主要用于调试线上站点). 之前已经发过一篇<借助FreeHttp为任意 ...

  6. 【数据共享】基于Landsat提取的全球河网(河宽)GDWL数据库

    GRWL数据库,全称Global River Widths from Landsat Database,是由Allen, George H & Pavelsky. Tamlin M等人基于La ...

  7. Windows server 2016 2019远程端口修改操作

    windows server 2016 2019修改远程端口操作   一.修改3389远程端口 1,按"win+r"快捷键,在对话框中输入regedit 2, 找到路径 \HKEY ...

  8. Linux之history使用技巧

    背景: 正常情况下,Linux系统中输入 history  只显示序号和历史命令如下图,但是当我们想要根据历史命令来排查一些故障问题时,无法精确获取该命令执行的详细信息,包括执行时间.执行的用户.是哪 ...

  9. CobaltStrike逆向学习系列(5):Bypass BeaconEye

    这是[信安成长计划]的第 5 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 BeaconEye 检测原理 0x02 Bypass 1 0x03 Bypass 2 0x04 效果图 ...

  10. windows清理用户痕迹

    1.日志管理器的基本使用 在这里创建自定义视图是非常重要的 在设置自定义视图不必设置的事件日志选项太多,可以按日志也可以按源进行设置,根据自己的情况来做决定 在cmd下可以使用wevtutil cl ...