顺序表的具体使用方法.数据解构(二)
创始人
2024-05-16 06:47:08
0

前言

提示:文本为数据解构(一)后续补充文:

本文具体讲解顺序表的具体使用方法


提示:以下是本篇文

系列文章目录

第一章 数据解构(一)


文章目录

前言

系列文章目录

一、静态的使用方式

二、动态的使用方式

1.定义一个结构体

2.初始化

3.扩容

4.尾加

5.尾减

6.头加

7.头减

8.查找

9.删除pos位置的值

10.pos位置插入x

11.销毁

总结


提示:以下是本篇文章正文内容,下面案例可供参考

回顾上文说到

 顺序表可以分为两种:

动态

使用动态来开辟的数组存储

静态

使用固定长度数组存储元素

一、静态的使用方式

代码如下(示例):

#define N 10//定义一个常量的宏
typedef int SLDataType;//从新定义int 的名称
typedef struct SeqList
{SLDataType a[N];//开辟一个固定大小的数组int size;		//有效数据个数int capacity;	//空间大小
}SL;

 

 

二、动态的使用方式

制作一个可以增,删,改,查,可扩容的数组

1.定义一个结构体

代码如下(示例):

typedef int SLDataType;//从新定义int 的名称typedef struct SeqList
{SLDataType* a;//开辟动态大小int size;		//有效数据个数int capacity;	//空间大小
}SL;

 SLDataType* a;//开辟动态大小
  int size;        //有效数据个数

  int capacity;    //空间大小

2.初始化

代码如下(示例):

void SListInit(SL* ps1)
{ps1->a = NULL;//把大小为空ps1->size = ps1->capacity = 0;//可用为0}

3.扩容

增容的目的是为了在输入数据时有可用空间

 代码如下(示例):

void SLCheckcapicity(SL* ps1)
{if (ps1->capacity == ps1->size){//当空间大小为0时给开辟4个空间//如果有空间就把以前的空间乘2int newcapicity = ps1->capacity == 0 ? 4 : ps1->capacity * 2;SLDataType* tmp = (SLDataType*)realloc(ps1->a, newcapicity * sizeof(int*));if (tmp ==NULL){printf("扩容失败");exit(-1);}ps1->a = tmp;//扩容好后的空间给aps1->capacity = newcapicity;//把范围大小给capacity}
}

4.尾加

 代码如下(示例):

void SLPushback(SL* ps1, SLDataType x)
{SLCheckcapicity(ps1);//先判度空间是否充足ps1->a[ps1->size] = x;ps1->size++;
}

5.尾减

 代码如下(示例):

void SLPopback(SL* ps1)
{if (ps1->size > 0){ps1->a[ps1->size-1] = 0;ps1->size--;}}

6.头加

 代码如下(示例):

void SLPushFront(SL* ps1, SLDataType x)
{SLCheckcapicity(ps1);int end = ps1->size - 1;while (end >= 0){ps1->a[end + 1] = ps1->a[end];end--;} ps1->a[0] = x;ps1->size++;
}

7.头减

 代码如下(示例):

void SLPopFront(SL* ps1) 
{int begin = 1;while (begin< ps1->size){ps1->a[begin-1] = ps1->a[begin];begin++;}ps1->size--;
}

8.查找

 代码如下(示例):

void SLFind(SL* ps1, SLDataType x)
{for (int i = 0; i < ps1->size; i++){if (ps1->a[i] == x) {return i;}}return -1;
}

9.删除pos位置的值

 代码如下(示例):

void SLErase(SL* ps1, int pos)
{if (pos <= ps1->size && pos >= 0){int begin = pos;while (begin size){ps1->a[begin-1] = ps1->a[begin];begin++;}ps1->size--;}
} 

10.pos位置插入x

 代码如下(示例):

void SLInsert(SL* ps1, int pos, SLDataType x)
{//这里的主要操作为选择的数不为下标而是数int y = pos == 0 ? pos : pos - 1;//因为顺表是连续的所以说不可以跳if (pos < ps1->size && pos >= 0){SLCheckcapicity(ps1);//判断是否需扩int end = ps1->size;while (end >= y){ps1->a[end + 1] = ps1->a[end];end--;}ps1->a[y] = x;ps1->size++;}
}

11.销毁

 代码如下(示例):

void SLDestory(SL* ps1)
{int Destory = ps1->a[0];while (ps1->size>=Destory){ps1->size--;}
}

总结

提示:这里对文章进行总结:

链表的问题是必须在内存中是连续存储,实践发现多次的使用,pos位置插入x可能会导致整个数组的顺序会有变化。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...