前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于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 ...
随机推荐
- linux_15
实现基于MYSQL验证的vsftpd虚拟用户访问 配置samba共享,实现/www目录共享 使用rsync+inotify实现/www目录实时同步 LVS调度算法总结 LVS的跨网络DR实现
- traceback.print_exc()的用法
Python使用traceback.print_exc()来代替print e 来输出详细的异常信息 [python] view plain copy try: 1/0 except Except ...
- ASP.NET与.NET Framework和C#的关系
你好,是我琉忆. 今天我们讲一讲ASP.NET与.NET Framework和C#的关系. 在开始介绍ASP.NET之前,我们需要先了解以下运行ASP.NET的开发平台.NET框架.如果你之前学过C# ...
- SQLMAP配置洋葱路由
[笔者目前使用的系统是kali渗透系统] =================================================================== 首先下载tor apt ...
- 第三章 in,not in 的理解,limit限制结果集
IN 运算符用来判断表达式的值是否位于给出的列表中:如果是,返回值为 1,否则返回值为 0.NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出的列表中:如果不是 ...
- Vue 源码解读(1)—— 前言
当学习成为了习惯,知识也就变成了常识. 感谢各位的 点赞.收藏和评论. 新视频和文章会第一时间在微信公众号发送,欢迎关注:李永宁lyn 文章已收录到 github 仓库 liyongning/blog ...
- 关于iOS APP转让
需要以下条件即可
- shell批量监控网站状态码
shell批量监控网站状态码脚本,使用curl很慢.等我学完其他方式,在来更新. #!/bin/bash #GuoYabin yuming=`/bin/cat yuming.txt` for i in ...
- 使用ODBC连接MySQL和EXCEL
1.安装ODBC 安装MySQL的时候,可以直接把ODBC一并安装了.如果没有安装的话,则在 https://dev.mysql.com/downloads/connector/odbc/ 下载相应的 ...
- WPF中ComboBox控件的SelectedItem和SelectedValue的MVVM绑定
问题描述:左侧是一个ListView控件,用于显示User类的Name属性,右侧显示其SelectedItem的其他属性,包括Age, Address,和Category.其中Category用Com ...