顺序表的具体使用方法.数据解构(二)
创始人
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可能会导致整个数组的顺序会有变化。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...