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,然后退出。那我们又有一种扩展的方法,从而容纳更多的数据。

  1. //原先代码
  2. print("OVERFLOW!!!");
  3. return 0;
  4.  
  5. //更改为
  6. pos = (DataType *)malloc(sizeof(DataType)*2*MAXNUM);
  7. if (pos == NULL){
  8. printf("OVERFLOW!!!");
  9. return 0;
  10. }
  11. for (int q=0; q<palist->MAXNUM; q++){
  12. pos[q] = palist->element[q];
  13. }//将已经满了的数据装进新申请的空间
  14. free(palist->element)//释放palist->element申请的内存
  15. palist->element = pos//将指向顺序表的指针指向新建的内存区域
  16. return 1;

2.另一个插入方法int insertPost_seq(PSeqList palist,int p,DataType x){}

  在palist所指的顺序表中,下标为p的元素之后,插入一个值为x的元素,返回插入成功与否的标志。

  1. int insertPost_seq(PSeqList palist,int p,DataType x){
  2. if (palist->n >= palist->MAXNUM){
  3. printf("OVERFLOW!!");
  4. return 0;
  5. } //插入的两个退出条件
  6. if (p<0 || p>n){
  7. printf("WRONGNUM");
  8. return 0;
  9. }
  10. for (int q=palist->n-1;q>p;q--){
  11. palist->element[q+1] = palist->element[q];
  12. }
  13. palist->element[p+1] = x;
  14. palist->n = palist->n + 1;
  15. return 1;
  16. }

3.另一种删除方式,前面的已经将根据下标删除给出,这一个是给出值删除顺序表中对应的值(只删除第一个遇到的相同的)。利用前面的定位方法。

  1. int deleteV_seq(PSeqList palist,DataType x){
  2. int q = locate_seq(palist,x);
  3. if(q == -1){
  4. printf("NOTFIND");
  5. return 0;
  6. }
  7. delete_seq(palist,q);
       return 1;
  8. }

-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. 线性结构和非线性结构、稀疏数组、队列、链表(LinkedList)

    一.线性结构和非线性结构 线性结构: 1)线性绪构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺 ...

  2. linux_3

    1.统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来 [root@lhq ~]#echo "total:`cat /etc/pa ...

  3. Java执行cmd命令、bat脚本、linux命令,shell脚本等

    1.Windows下执行cmd命令 如复制 D:\tmp\my.txt 到D:\tmp\my_by_only_cmd.txt 现文件如图示: 执行代码: private static void run ...

  4. SpringMVC探秘-请求之路

    SpringMVC探秘-请求之路 开始 今天来分析一下SpringMVC的原理,探究SpringMVC如何把请求传递到每个Controller的方法上,从Servlet到Controller,一个请求 ...

  5. Solution -「CEOI 2017」「洛谷 P4654」Mousetrap

    \(\mathscr{Description}\)   Link.   在一个含 \(n\) 个结点的树形迷宫中,迷宫管理者菈米莉丝和一只老鼠博弈.老鼠初始时在结点 \(y\),有且仅有结点 \(x\ ...

  6. Java 线程的 5 种状态

    线程状态图: 线程共包括以下 5 种状态: 1. 新建状态(New): 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 2. 就绪状态(Runna ...

  7. web开发 小方法3-position

    值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "top", " ...

  8. nginx加大缓存

    http { server { listen 0.0.0.0:81; server_name localhost; -- proxy_buffer_size 128k; proxy_buffers 3 ...

  9. 简述LSM-Tree

    LSM-Tree 1. 什么是LSM-Tree LSM-Tree 即 Log Structrued Merge Tree,这是一种分层有序,硬盘友好的数据结构.核心思想是利用磁盘顺序写性能远高于随机写 ...

  10. 攻防世界之Web_supersqli

    题目 本题考查sql注入传送门https://www.cnblogs.com/shacker/p/15917173.html 按照SQL注入一步一步执行 发现有2个列 然后用union select联 ...