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

做效果图挣钱的网站深圳网络推广外包

做效果图挣钱的网站,深圳网络推广外包,网站权重收录,东坑镇仿做网站上一节我们认识到了什么是数据结构 这一节我们就来实现第一个数据结构的实现 思考一个问题: 假定一个数组,空间为10,已经使用了5个,向其中插入数据的步骤: 1.插入数据,我们先要求数组长度,其…

上一节我们认识到了什么是数据结构

这一节我们就来实现第一个数据结构的实现

思考一个问题:

假定一个数组,空间为10,已经使用了5个,向其中插入数据的步骤:

1.插入数据,我们先要求数组长度,其中有效数据的个数,判断空余空间的大小,向下标中放入有效数据;(这里需要判断数组是否太满了,剩余空间是否还足够);

2.如果数据量庞大,我们就要频繁获取数组有限个数,就会影响程序运行速率;

这时候我们就要利用其余数据结构(顺序表、链表、二叉树;更甚至红黑树、B树等更为高级的数据结构);

那我们就进入,顺序表的学习吧;

顺序表

顺序表是一种线性表

线性表(List):零个或多个数据元素的有限序列。线性表的数据集合为{a1,a2,…,an},假设每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件

顺序表(对数组的封装)的分类

静态顺序表

顾名思义:即是使用定长数组来储存元素

typedef int SLdataTapy;
#define N  10   //数组的大小由N决定typedef struct seqlist {SLdataTapy arr[N];//定长数组int size;//有效数组个数
}SL;

注意:这就会出现:空间小了不够用,空间大了,空间浪费。

想一想呢,根据之前的学习,是什么可以动态增删内存呢

没错,就是利用malloc、relloc、calloc内存函数了

(忘记的小朋友可以回顾一下往期的博客,动态内存的管理(内存储存的god)-CSDN博客)

动态顺序表

typedef int SLdataTapy;typedef struct seqlist {SLdataTapy* a;//用来开辟动态内存int size;//有效数组个数int capacity;//剩余容量;判断是否需要新添加内存
}SL;

顺序表的实现

#define INIT_CAPACITY 4
typedef int SLDataType;
// 动态顺序表 -- 按需申请
typedef struct SeqList
{SLDataType* a;int size; // 有效数据个数int capacity; // 空间容量
}SL;
//初始化和销毁
void SLInit(SL* ps);
void SLDestroy(SL* ps);
void SLPrint(SL* ps);
//扩容
void SLCheckCapacity(SL* ps);
//头部插⼊删除 / 尾部插⼊删除
void SLPushBack(SL* ps, SLDataType x);
void SLPopBack(SL* ps);
void SLPushFront(SL* ps, SLDataType x);
void SLPopFront(SL* ps);
//指定位置之前插⼊/删除数据
void SLInsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
int SLFind(SL* ps, SLDataType x);

以上则是我们需要实现顺序表的作用


顺序表的初始化

将其中的数组置为NULL;其余置为0;

void SLInit(SL* ps) {ps->a = NULL;//置为NULL,以防野指针的出现ps->size = ps->capacity = 0;
}

有初始化就有销毁

销毁则是需要将数组重新置为NULL;其余置为0;

void SLDestroy(SL* ps) {if (ps->a) {//判断数组中是否为空free(ps->a);//因为动态顺序表需要使用malloc开辟内存,所以需要注意释放内存}ps->a = NULL;ps->size = ps->capacity = 0;
}

当我们设置好一切后,就要对数组进行扩容

//扩容
void SLCheckCapacity(SL* ps) {//先要判断内存够不够if (ps->size == ps->capacity) {//使用malloc relloc cellocint newcappacity = ps->capacity * 2;//一般增容原来内存的二到三倍;SLDataType*tmp = (SLDataType*)relloc(ps->a,newcappacity * sizeof(SLDataType));//注:这里没有直接使用ps->a直接申请,是为了防止内存申请失败;防止数据丢失if (tmp == NULL) {//也可以使用assert直接终止程序;需要使用aseert.h的头文件perror("relloc fail");exit(1);//直接退出程序;也可使用return;}//空间增容成功ps->a = tmp;ps->capacity = newcappacity;}
}

其中出现了一点小问题,是否发现了呢;

果然聪明的你一眼就发现问题了呢;

int newcappacity = ps->capacity * 2;//一般增容原来内存的二到三倍;
SLDataType*tmp = (SLDataType*)relloc(ps->a,newcappacity * sizeof(SLDataType));

在使用这句的前提是capacity为0;就会导致开辟为0的空间,就会出现错误;

就可以利用到三目操作符,使其完成扩容:如以下代码

int newcappacity = ps->capacity == 0 ? 4 :ps->capacity*2

ps->capacity是否为0;如果是则为4;否则乘以2;


我们已经完成了初始化,销毁与扩容,你可以尝试剩余代码的编写;

点关注,不迷路,up将会在接下来揭晓如何编写!!!

http://www.mmbaike.com/news/93819.html

相关文章:

  • 论坛类网站可以做移动端吗模板建站和开发网站区别
  • 电子商务网站建设选择服务器要考虑的因素有武汉关键词排名推广
  • 网站SEO容易做吗网络营销的常用工具
  • 青海wap网站建设公司网络营销推广8种方法
  • 网站做外部链接百度小程序优化排名
  • 做哪类视频网站需要视频证书如何注册域名
  • 怎样查网站谁做的谷歌流量代理代理
  • 凡科网站官网登录入口百度品牌广告
  • 做哪些网站比较赚钱可以商用的电视app永久软件
  • 长沙网站制作费用百度引流平台
  • 手机网站特效代码seo关键词优化推广报价表
  • 平面广告设计行业aso关键词排名优化是什么
  • 做网站还赚钱么网站域名解析
  • 济南住房和城乡建设局网站app优化排名
  • 展览设计网站推荐百度关键词搜索优化
  • 如何设计校园网站在线营销推广
  • 宁乡电商网站建设价格百度官网app下载安装
  • 做网站常用软件互联网营销师培训课程
  • 企业网站推广 知乎网络推广怎么做效果好
  • 家居全屋定制seo有些什么关键词
  • 乌克兰设计网站建设成都seo外包
  • 众划算网站开发优化手机流畅度的软件
  • 电子科技公司网站百度怎么搜索网址打开网页
  • 金融软件网站建设公司排名2021国内最好用免费建站系统
  • 怎样查看网站制作公司海外seo推广公司
  • 学做网站论坛vip码提高基层治理效能
  • 免费做网站有哪些google关键词推广
  • 个人做房产网站有哪些资料武汉软件测试培训机构排名
  • 上海市建设部注册中心网站日本进口yamawa
  • 山东大禹建设集团网站新闻最近的大事10件