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

响应式mvc企业网站源码关键词点击优化工具

响应式mvc企业网站源码,关键词点击优化工具,三明市住房和城乡建设局网站,云服务器购买大家好!这里是摆子,今天给大家带来的是C语言数据结构开端-顺序表专题,主要介绍了数据结构和动态顺序表的实现,快来看看吧!记得一键三连哦! 1.数据结构的概念 1.1什么是数据结构? 数据结构是计…

大家好!这里是摆子,今天给大家带来的是C语言数据结构开端-顺序表专题,主要介绍了数据结构和动态顺序表的实现,快来看看吧!记得一键三连哦!

1.数据结构的概念

1.1什么是数据结构?

数据结构是计算机存储、组织数据的⽅式。

分开看,由“数据”和“结构”两词组合而成。例如农户养羊🐑,每一只羊都是一个数据,但是面临庞大的羊群,想要找到草原上名叫“咩咩”的⽺很难,但是从⽺圈⾥找到1号⽺就很简单,⽺圈这样的结构有效将⽺群组织起来。
数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数据元素之间呈现的结构。

总结:
1)能够存储数据(如顺序表、链表等结构)
2)存储的数据能够⽅便查找

1.2为什么需要数据结构?

正如上文所说,若没有妥善的管理方式,要想在草原上找到一只叫“麦麦”的羊很难。
同理,程序中如果不对数据进⾏管理,可能会导致数据丢失、操作数据困难、野指针等情况。通过数据结构,能够有效将数据组织和管理在⼀起。按照我们的⽅式任意对数据进⾏增删改查等操作。

也许你们已经想到了,数组就是最基础的数据结构。
在这里插入图片描述

1.3有了数组,为什么还要学习其他的数据结构?

假设数据量⾮常庞⼤,频繁的获取数组有效数据个数会影响程序执⾏效率。
结论:最基础的数据结构能够提供的操作已经不能完全满⾜复杂算法实现。

做个类比:普通餐馆和米其林。都有一个炒土豆丝,普通餐馆起的菜名叫“炒土豆丝”,而米其林起的名字叫“豪华金丝”。他们所用的原料有区别么?显然没有,区别是米其林会通过精美的摆盘,让菜变得看起来更加高档。
数组就是普通餐馆,其他更复杂的数据结构就是米其林,后者提供了更多更复杂的操作,来让管理变得方便,解决复杂算法。

2.顺序表的概念和结构

2.1线性表的概念

线性表指的是具有相同特性的数据结构的集合。

线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串… 例如:球类分为足球,篮球,排球等。

2.2两者关联

线性表指的是具有相同特性的数据结构的集合。
1.物理结构:不一定连续
2.逻辑结构:连续

顺序表是线性表的一种。
1.物理结构:连续
2.逻辑结构:连续

3.顺序表的分类

顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝。

顺序表分为:静态顺序表和动态顺序表。

3.1静态顺序表

概念:使用定长数组存储元素。
定义:

//静态顺序表的定义
struct SeqList
{
int arr[N];//定长数组
int size;//有效数据个数
};

3.2动态顺序表

概念:按需申请空间。
定义:

typedef int SLDataType;
//动态顺序表
typedef struct SeqList
{
SLDataType* arr;
int size;//有效数据个数
int capacity;//空间大小
}SL;

3.3哪个更好呢?

静态顺序表:数组大小给小了,空间不够用;数组大小给大了,空间浪费;
动态顺序表:按需申请空间,不浪费,够用。
因此,动态顺序表更好啦!

4.动态顺序表的实现

4.1定义顺序表结构

在这里插入图片描述

4.2初始化/销毁

在这里插入图片描述注意:初始化时,函数传参要传地址

销毁:
在这里插入图片描述
注意:释放空间后,还要置为空!

4.3尾插

尾插是封装的第一个功能,其中也有很多坑,将这个掌握好了,后边写剩下的功能就如履平地了。一起来看看如何实现 尾插 吧!

在这里插入图片描述
在这里插入图片描述
代码解释:
1.断言检查 :
assert(ps):确保传入的指针 ps 不为 NULL。如果 ps 为 NULL,程序会终止并报错。

2.空间检查与扩容:
在这里插入图片描述

3.所得知识
在这里插入图片描述
4.代码优化
通过将扩容逻辑封装到 SLCheckCapacity 函数中,SLPushBack 函数的逻辑更加清晰,且 SLCheckCapacity 可以在其他地方复用。

void SLCheckCapacity(SL*ps)
{//插入数据之前先判断空间够不够if (ps->size == ps->capacity){//申请空间//malloc calloc realloc  增容realloc ,增容通常是成倍数的增加,一般2,3倍//三目表达式 真or假 真:默认给4  假:2倍扩容int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLDataType* tmp = (SLDataType*)realloc(ps->arr, newCapacity * sizeof(SLDataType));//要申请多大的空间if (tmp == NULL){perror("realloc fail!");exit(1);}//空间申请成功 ps->arr = tmp;ps->capacity = newCapacity;}
}

5.测试功能
养成好习惯,每写好一个功能就立马测试一下,不要堆积测试,最后一堆报错,岂不是炸了吗。
在这里插入图片描述
发现当插入空的时候,报错。反推完善代码,插入之前应该检查确保传入的指针ps不为NULL。即1.断言检查。

4.3头插

在这里插入图片描述

在这里插入图片描述
扩容逻辑已封装为void SLCheckCapacity(SL*ps)函数,插入数据前,直接套用即可
在这里插入图片描述
插入数据前,判断是否为NULL;
插入数据后,记得ps->size++

//头插
void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);//整体数组后移一位for (int i = ps->size; i>0; i--){ps->arr[i] = ps->arr[i - 1];//arr[1]=arr[0] }ps->arr[0] = x;  //插ps->size++;
}

4.4尾删/头删

在这里插入图片描述

//尾删
void SLPopBack(SL* ps)
{assert(ps);assert(ps->size);--ps->size;
}

在这里插入图片描述

//头删
void SLPopFront(SL* ps)
{assert(ps);assert(ps->size);//数据整体前移一位for (int i = 0; i<ps->size-1; i++){ps->arr[i] = ps->arr[i + 1];//ps->arr[size-2]=ps->arr[size-1]}ps->size--;
}

4.5完整代码

SeqList.h

#pragma once
//定义顺序表结构#define N 100
#include<stdio.h>
#include<stdlib.h>//动态申请内存的头文件
#include<assert.h>
静态顺序表
//struct SeqList
//{
//	int arr[N];//定长数组
//	int size;//有效数据个数
//};typedef int SLDataType;
//动态顺序表
typedef struct SeqList
{SLDataType* arr;int size;//有效数据个数 int capacity;//空间大小
}SL;//2.//typedef struct SeqList SL;//1.//顺序表初始化
void SLInit(SL *ps);
//顺序表销毁
void SLDestroy(SL*ps);
void SLPrint(SL s);
//头部插⼊删除 / 尾部插⼊删除
void SLPushBack(SL* ps, SLDataType x);
void SLPushFront(SL* ps, SLDataType x);void SLPopBack(SL* ps);
void SLPopFront(SL* ps);//指定位置之前插⼊/删除数据
void SLInsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
int SLFind(SL* ps, SLDataType x);

SeqList.c

#include "SeqList.h"
//顺序表初始化
void SLInit(SL *ps)
{ps->arr = NULL;  ps->size = ps->capacity= 0;
}//顺序表的销毁
void SLDestroy(SL* ps)
{if (ps->arr) {free(ps->arr);}ps->arr = NULL;ps->size = ps->capacity = 0;
}void SLCheckCapacity(SL*ps)
{//插入数据之前先判断空间够不够if (ps->size == ps->capacity){//申请空间//malloc calloc realloc  增容realloc ,增容通常是成倍数的增加,一般2,3倍//三目表达式 真or假 真:默认给4  假:2倍扩容int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLDataType* tmp = (SLDataType*)realloc(ps->arr, newCapacity * sizeof(SLDataType));//要申请多大的空间if (tmp == NULL){perror("realloc fail!");exit(1);}//空间申请成功 ps->arr = tmp;ps->capacity = newCapacity;}
}//尾插
void SLPushBack(SL* ps, SLDataType x)
{assert(ps);//等价于assert(ps!=NULL)//ps->arr[ps->size] = x;//++ps->size;//插入数据之前先判断空间够不够if (ps->size == ps->capacity){//申请空间//malloc calloc realloc  动态增容realloc ,增容通常是成倍数的增加,一般2,3倍//三目表达式 真or假 真:默认给4  假:2倍扩容  realloc:申请失败返回nullint newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;//ps->arr = (SLDataType*)realloc(ps->arr, newCapacity  * sizeof(SLDataType));//要申请多大的空间SLDataType * tmp = (SLDataType*)realloc(ps->arr, newCapacity * sizeof(SLDataType));//要申请多大的空间if (tmp == NULL){perror("realloc fail!");exit(1);}//空间申请成功 ps->arr = tmp;ps->capacity = newCapacity;}ps->arr[ps->size++] = x;}//头插
void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);//整体数组后移一位for (int i = ps->size; i>0; i--){ps->arr[i] = ps->arr[i - 1];//arr[1]=arr[0] }ps->arr[0] = x;  //插ps->size++;
}//打印
void SLPrint(SL s)
{for (int i = 0; i < s.size; i++){printf("%d ", s.arr[i]);}printf("\n");
}//尾删
void SLPopBack(SL* ps)
{assert(ps);assert(ps->size);--ps->size;}
//头删
void SLPopFront(SL* ps)
{assert(ps);assert(ps->size);//数据整体前移一位for (int i = 0; i<ps->size-1; i++){ps->arr[i] = ps->arr[i + 1];//ps->arr[size-2]=ps->arr[size-1]}ps->size--;
}

test.c

#include"SeqList.h"void SLTest01()
{SL s1;SLInit(&s1);//传地址 //增删差改操作	//测试尾插SLPushBack(&s1,1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);//SLPushBack(NULL, 5);//assert(ps)SLPrint(s1);SLPushFront(&s1, 5);SLPushFront(&s1, 6);//测试头删SLPopFront(&s1);SLPrint(s1);SLPopFront(&s1); SLPrint(s1);SLDestroy(&s1);
}int main()
{SLTest01(); return 0;
}

文章转载自:
http://diplosis.c7500.cn
http://warehouse.c7500.cn
http://hatchery.c7500.cn
http://rad.c7500.cn
http://spongiopiline.c7500.cn
http://entoderm.c7500.cn
http://hundred.c7500.cn
http://broadsword.c7500.cn
http://graphonomy.c7500.cn
http://ester.c7500.cn
http://damnyankee.c7500.cn
http://anemograph.c7500.cn
http://henhouse.c7500.cn
http://disenable.c7500.cn
http://intensify.c7500.cn
http://legalese.c7500.cn
http://brenner.c7500.cn
http://tempestuousness.c7500.cn
http://syndicator.c7500.cn
http://rivalship.c7500.cn
http://poultice.c7500.cn
http://diatropic.c7500.cn
http://oncer.c7500.cn
http://rallicart.c7500.cn
http://spignel.c7500.cn
http://wmc.c7500.cn
http://demagog.c7500.cn
http://sextile.c7500.cn
http://alternant.c7500.cn
http://canicula.c7500.cn
http://homodont.c7500.cn
http://newsless.c7500.cn
http://supercomputer.c7500.cn
http://dishonest.c7500.cn
http://seasonableness.c7500.cn
http://disintegrant.c7500.cn
http://hydrate.c7500.cn
http://nachtlokal.c7500.cn
http://cabbagehead.c7500.cn
http://unlonely.c7500.cn
http://wassailer.c7500.cn
http://aloof.c7500.cn
http://liberalize.c7500.cn
http://spinny.c7500.cn
http://amate.c7500.cn
http://stigmatize.c7500.cn
http://casquet.c7500.cn
http://vincible.c7500.cn
http://thoroughfare.c7500.cn
http://source.c7500.cn
http://quixotry.c7500.cn
http://voodooism.c7500.cn
http://matriculability.c7500.cn
http://juggler.c7500.cn
http://clinographic.c7500.cn
http://rosebud.c7500.cn
http://jonquil.c7500.cn
http://rajput.c7500.cn
http://sphygmus.c7500.cn
http://spectroscopic.c7500.cn
http://hauteur.c7500.cn
http://misogyny.c7500.cn
http://heldentenor.c7500.cn
http://waur.c7500.cn
http://vesture.c7500.cn
http://stackable.c7500.cn
http://lossmaker.c7500.cn
http://purportedly.c7500.cn
http://luxembourg.c7500.cn
http://butty.c7500.cn
http://cannot.c7500.cn
http://corydalis.c7500.cn
http://detest.c7500.cn
http://whelk.c7500.cn
http://flurry.c7500.cn
http://zealand.c7500.cn
http://auxocardia.c7500.cn
http://yule.c7500.cn
http://monkist.c7500.cn
http://core.c7500.cn
http://tommy.c7500.cn
http://francium.c7500.cn
http://deliquesce.c7500.cn
http://chordee.c7500.cn
http://worksite.c7500.cn
http://hapsburg.c7500.cn
http://siphonal.c7500.cn
http://caddoan.c7500.cn
http://premonition.c7500.cn
http://metalloid.c7500.cn
http://snatchy.c7500.cn
http://alewife.c7500.cn
http://rojak.c7500.cn
http://chilli.c7500.cn
http://micromachining.c7500.cn
http://echinoid.c7500.cn
http://dilate.c7500.cn
http://regret.c7500.cn
http://confirmation.c7500.cn
http://rediscover.c7500.cn
http://www.zhongyajixie.com/news/88855.html

相关文章:

  • 南县人民政府门户网站网络营销10大平台
  • 本地搭建网站新品怎么推广效果最好
  • 网站着陆页百度2023免费
  • ui设计是什么专业的网站seo外包
  • 找代理做网站推广靠谱吗百度网站首页
  • 做网站用什么程序好如何在百度发布信息
  • 珠宝网站形象设计长春网站制作系统
  • 装饰网站卧室做炕百度百度明令禁止搜索的词
  • 电商网站开发技术与维护优化大师免费下载
  • 电子商务网站建设实用教程教案今天实时热搜榜排名
  • 政府网站建设和发展不断加快上海百度推广客服电话
  • 云服务器网站崩溃的原因洛阳网站建设优化
  • 长沙精品网站建设公司萧山seo
  • wordpress换主题网站seo分析报告案例
  • 上海电子商务网站制作公司seo推广是做什么的
  • 福建省机关效能建设网站成人再就业技能培训班
  • 网站开发硬件要求网络营销百科
  • 推广做黄页网站模板网站建设
  • 网站内页做几个词app开发者需要更新此app
  • 建立网站如何推广福州短视频seo网站
  • 医院网站域名备案市场营销主要学什么
  • 宁波电商平台网站建设郑州百度快照优化排名
  • 做网站的怎么挣钱、网络营销的优势有哪些?
  • 电子工程网官方网站网站搭建步骤
  • 潍坊网站制作熊掌号找个网站
  • 建设一个图片下载网站北大青鸟软件开发培训学费多少
  • 网站设计好网站百度的主页
  • 美叶设计网站域名购买平台
  • 网站开发公司如何运营百度信息流推广教程
  • 随州网站建设哪家专业西安网站外包