C语言动态顺序表结构的创建、初始化结构、尾插、尾删、头插、头删、指定位置插入、指定位置删除、找指定数值下标等的介绍

news/2024/7/20 18:00:16/文章来源:https://blog.csdn.net/Farewell_me/article/details/139073559

文章目录

  • 前言
  • 一、 结构创建
  • 二、 初始化结构
  • 三、 打印动态顺序表
  • 四、 销毁动态顺序表
  • 五、 尾插
  • 六、尾删
  • 七、 头插
  • 八、 头删
  • 九、指定位置插入
  • 十、指定位置删除
  • 十一、找指定数值下标
  • 总结

前言

C语言动态顺序表结构的创建、初始化结构、尾插、尾删、头插、头删、指定位置插入、指定位置删除、找指定数值下标等的介绍


一、 结构创建

结构的创建

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>#define INIT_CAPACITY 4// 动态顺序表
typedef int SLDataType;typedef struct SeqList
{SLDataType* arr;int size; // 有效数据的个数int capacity; // 动态空间的容量
}SL;
  • 创建动态顺序表,将int类型重命名为SLDataList。方便其他数据类型顺序表的创建。
  • 同时定义动态顺序表的初始容量 INIT_CAPACITY

二、 初始化结构

初始化结构定义

// 初始化动态顺序表
void SLInit(SL* ps)
{SLDataType* tmp = (SLDataType*)malloc(sizeof(SLDataType) * INIT_CAPACITY);if (tmp == NULL){perror("SLInit()::malloc()");return;}ps->arr = tmp;ps->size = 0;ps->capacity = INIT_CAPACITY;
}
  • 动态开辟初始容量(INIT_CAPACITY)的空间。
  • 有效数据size置为0。
  • 容量置为初始容量。

三、 打印动态顺序表

打印动态顺序表定义

// 打印动态顺序表
void SLPrint(SL* ps)
{assert(ps);int i = 0;for (i = 0; i < ps->size; i++){printf("%d ", ps->arr[i]);}printf("\n");
}

四、 销毁动态顺序表

销毁动态顺序表定义

// 销毁动态顺序表
void SLDestroy(SL* ps)
{free(ps->arr);ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}
  • 释放ps->arr指向的空间,并将其置为空指针。
  • 将有效数据和空间置为0。

销毁动态顺序表测试

void SLTest01()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 销毁动态顺序表SLDestroy(&s);}

效果如下:
在这里插入图片描述

五、 尾插

尾差函数定义

// 尾插
void SLPushBack(SL* ps, SLDataType x)
{assert(ps);if (ps->capacity == ps->size){SLDataType* tmp = (SLDataType*)realloc(ps->arr, (ps->capacity * 2)* sizeof(SLDataType) );if (NULL == tmp){perror("SLPushBack()::realloc()");return;}ps->arr = tmp;tmp = NULL;ps->capacity *= 2;}ps->arr[ps->size] = x;ps->size++;
}

操作结构测试

void SLTest01()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 尾插SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPushBack(&s, 5);SLPushBack(&s, 6);SLPushBack(&s, 7);SLPushBack(&s, 8);SLPushBack(&s, 9);SLPrint(&s);// 销毁动态顺序表SLDestroy(&s);}

效果如下:
在这里插入图片描述

六、尾删

尾删函数定义

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

尾删函数测试

void SLTest01()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 尾插SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPushBack(&s, 5);SLPushBack(&s, 6);SLPushBack(&s, 7);SLPushBack(&s, 8);SLPushBack(&s, 9);SLPrint(&s);// 尾删SLPopBack(&s);SLPopBack(&s);SLPopBack(&s);SLPopBack(&s);SLPopBack(&s);SLPopBack(&s);//SLPopBack(&s);SLPrint(&s);// 销毁动态顺序表SLDestroy(&s);}

效果如下:
在这里插入图片描述

七、 头插

头插函数定义

// 头插
void SLPushFront(SL* ps, SLDataType x)
{assert(ps);if (ps->capacity == ps->size){SLDataType* tmp = (SLDataType*)realloc(ps->arr, (ps->capacity * 2) * sizeof(SLDataType));if (NULL == tmp){perror("SLPushBack()::realloc()");return;}ps->arr = tmp;tmp = NULL;ps->capacity *= 2;}int i = 0;for (i = ps->size; i > 0; i--){ps->arr[i] = ps->arr[i - 1]; // arr[1] = arr[0]}ps->arr[0] = x;ps->size++;
}

头插函数测试

void SLTest02()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 头插SLPushFront(&s, 1);SLPushFront(&s, 2);SLPushFront(&s, 3);SLPushFront(&s, 4);SLPushFront(&s, 5);SLPushFront(&s, 6);SLPushFront(&s, 7);SLPushFront(&s, 8);SLPushFront(&s, 9);SLPrint(&s);// 销毁动态顺序表SLDestroy(&s);}

效果如下:
在这里插入图片描述

八、 头删

头删定义

// 头删
void SLPopFront(SL* ps)
{assert(ps->size > 0);int i = 0;for (i = 0; i < ps->size - 1; i++){ps->arr[i] = ps->arr[i + 1];// arr[size- 2] = arr[size-1]}ps->size--;
}

头插函数测试

void SLTest02()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 头插SLPushFront(&s, 1);SLPushFront(&s, 2);SLPushFront(&s, 3);SLPushFront(&s, 4);SLPushFront(&s, 5);SLPushFront(&s, 6);SLPushFront(&s, 7);SLPushFront(&s, 8);SLPushFront(&s, 9);SLPrint(&s);// 头删SLPopFront(&s);SLPopFront(&s);SLPopFront(&s);SLPopFront(&s);SLPopFront(&s);SLPopFront(&s);//SLPopFront(&s);SLPrint(&s);// 销毁动态顺序表SLDestroy(&s);}

效果如下:
在这里插入图片描述

九、指定位置插入

指定位置插入函数定义

// 指定位置插入
void SLInsert(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos <= ps->size);SLCheckCapacity(ps);int i = 0;for (i = ps->size; i > pos; i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[pos] = x;ps->size++;}

指定位置插入函数测试

void SLTest03()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 先进行尾插SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPushBack(&s, 5);// 指定位置插入SLInsert(&s, 3, 66);SLPrint(&s);SLInsert(&s, 5, 100);SLPrint(&s);// 销毁动态顺序表SLDestroy(&s);
}

效果如下:
在这里插入图片描述

十、指定位置删除

指定位置删除函数定义

// 指定位置删除
void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);int i = 0;for (i = pos; i < ps->size-1; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

指定位置删除函数测试

void SLTest03()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 先进行尾插SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPushBack(&s, 5);SLPrint(&s);// 指定位置删除SLErase(&s, 3);SLPrint(&s);SLErase(&s, 2);SLPrint(&s);// 销毁动态顺序表SLDestroy(&s);
}

效果如下:

在这里插入图片描述

十一、找指定数值下标

找指定数值下标函数定义

// 找指定数值下标
int SLFind(SL* ps, SLDataType x)
{assert(ps);int i = 0;for (i = 0; i < ps->size; i++){if (ps->arr[i] == x){return i;}}return -1;
}

找指定数值下标函数测试

void SLTest03()
{SL s = { 0 };// 初始化动态顺序表SLInit(&s);// 先进行尾插SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPushBack(&s, 5);SLPrint(&s);//找指定数值下标int find = SLFind(&s, 3);if (find != -1){printf("找到了, 下标为:%d\n", find);}else{printf("没找到!!!\n");}// 销毁动态顺序表SLDestroy(&s);
}

效果如下:
在这里插入图片描述


总结

C语言动态顺序表结构的创建、初始化结构、尾插、尾删、头插、头删、指定位置插入、指定位置删除、找指定数值下标等的介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1052300.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芯片设计公司外协ERP数字化运营:科技与管理的融合

随着信息技术的快速发展&#xff0c;ERP(企业资源计划)系统已经成为现代企业管理不可或缺的一部分。在芯片设计行业&#xff0c;由于产品的复杂性、技术的高要求以及市场的快速变化&#xff0c;外协ERP数字化运营显得尤为重要。 芯片设计公司的外协ERP数字化运营&#xff0c;主…

Docker CIG使用

Docker CIG是什么 CIG为&#xff1a;CAdvisor监控收集、InfluxDB存储数据、Granfana图表展示 这个组合是一个常见的监控 Docker 容器的解决方案,它包括以下三个组件: cAdvisor (Container Advisor): cAdvisor 是一个开源的容器资源监控和性能分析工具。它能够收集有关正在运行的…

云原生Kubernetes: K8S 1.26版本 部署KubeSphere

目录 一、实验 1.环境 2.K8S 1.26版本部署HELM 3.K8S 1.26版本 部署KubeSphere 4.安装KubeSphere DevOps 二、问题 1.如何安装Zadig 2.扩展插件Zadig安装失败 3.calico 如何实现不同node通信 4.如何清除docker占用的磁盘空间 5.如何强制删除资源 6.namespace删除不…

Java进阶学习笔记26——包装类

包装类&#xff1a; 包装类就是把基本类型的数据包装成对象。 看下API文档&#xff1a; deprecated&#xff1a;极力反对、不赞成的意思。 marked for removal&#xff1a;标识为去除的意思。 自动装箱&#xff1a;基本数据类型可以自动转换成包装类。 自动拆箱&#xff1a;…

Ubuntu20.04安装VINS_Mono 和 VINS_Fusion

文章目录 一、问题描述二、依赖环境1. Eigen 安装2. glog 安装3. gflags 安装4. ceres 安装 三、VINS-Mono 安装1. git 下载并安装2. OpenCV 版本冲突3. 运行 四、VINS—Fusion 安装1. git 下载并安装2. OpenCV 版本冲突3. 运行 五、日常bug1. 动静态库链接冲突 一、问题描述 …

AIGC行业的发展前景与市场需求

简介&#xff1a;探讨当前时机是否适合进入AIGC行业&#xff0c;考虑行业发展阶段和市场需求。 方向一&#xff1a;行业前景 AIGC&#xff08;人工智能生成内容&#xff09;行业是近年来随着人工智能技术的快速发展而兴起的一个新兴领域&#xff0c;它涉及到使用人工智能技术来…

11.Redis之zset类型

1.zset类型基本介绍 有序描述的是&#xff1a;升序/降序 Set 集合 1.唯一 2. 无序 孙行者,行者孙, 者行孙 >同一只猴~~ List有序的 孙行者,行者孙, 者行孙 >不同的猴~~ zset 中的 member 仍然要求是唯一的!!(score 则可以重复) 排序的规则是啥? 给 zset 中的 member 同…

通过域名接口申请免费的ssl多域名证书

来此加密已顺利接入阿里云的域名接口&#xff0c;用户只需一键调用&#xff0c;便可轻松完成域名验证&#xff0c;从而更高效地申请证书。接下来&#xff0c;让我们详细解读一下整个操作过程。 来此加密官网 免费申请SSL证书 免费SSL多域名证书&#xff0c;泛域名证书。 首先&a…

Jmeter元件及基本作用域

&#x1f680;从今天开始学习性能测试工具——Jmeter&#xff0c;小梦也是先学习了下Jmeter的元件概念以及其基本的作用域&#xff0c;整理了下笔记&#xff0c;希望不管是从事开发领域还是测试领域的朋友们&#xff0c;我们一起学习下Jmeter工具&#xff0c;提升工作中的技能&…

leetcode栈和队列的相关题、有效的括号、用队列实现栈、用栈实现队列、设计循环队列等介绍

文章目录 前言一、有效的括号二、用队列实现栈三、 用栈实现队列四、设计循环队列总结 前言 leetcode栈和队列的相关题、有效的括号、用队列实现栈、用栈实现队列、设计循环队列等介绍 一、有效的括号 leetcode有效的括号 // 动态增长的栈 typedef char STDataType; typedef…

第十七届全国大学生信息安全竞赛创新实践能力赛初赛部分复现

Misc 神秘文件 1.根据提示信息&#xff0c;均需要从ppt中提取信息 2.在ppt的属性中发现一串密文和key&#xff0c;解密之后得到第一部分&#xff0c;根据提示Bifid chipher&#xff0c;为双歧密码解密&#xff0c;使用Bifid Cipher Decode解码 3.在第五张幻灯片&#xff0c;…

微服务实践k8sdapr开发部署调用

前置条件 安装docker与dapr: 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序安装k8s dapr 自托管模式运行 新建一个webapi无权限项目 launchSettings.json中applicationUrl端口改成5001,如下: "applicationUrl": "http://localhost:5001" //Wea…

K-means聚类算法详细介绍

目录 &#x1f349;简介 &#x1f348;K-means聚类模型详解 &#x1f348;K-means聚类的基本原理 &#x1f348;K-means聚类的算法步骤 &#x1f348;K-means聚类的优缺点 &#x1f34d;优点 &#x1f34d;缺点 &#x1f348;K-means聚类的应用场景 &#x1f348;K-mea…

mac清理软件推荐免费 mac清理系统数据怎么清理 cleanmymac和腾讯柠檬哪个好

macbook是苹果公司的一款高性能的笔记本电脑&#xff0c;受到了很多用户的喜爱。但是&#xff0c;随着使用时间的增长&#xff0c;macbook的系统也会积累一些垃圾文件&#xff0c;影响其运行速度和空间。那么&#xff0c;macbook系统清理软件推荐有哪些呢&#xff1f;macbook用…

爬虫案例:有道翻译python逆向

pip install pip install requestspip install base64pip install pycrytodome tools 浏览器的开发者工具&#xff0c;重点使用断点&#xff0c;和调用堆栈 工具网站&#xff1a;https://curlconverter.com/ 简便请求发送信息 flow 根据网站信息&#xff0c;preview,respon…

基于 vLLM 搭建 DeepSeek-V2 Chat 服务

直奔主题。 安装vLLM 官方实现的代码还没有 merge 到 vLLM 主分支&#xff0c;所以直接 git clone DeepSeek 的分支。 git clone https://github.com/zwd003/vllm.git cd vllm pip install -e .源码安装大概耗时 10 分钟。 OpenAI 接口规范启动 官方 Github 放的是单条推理…

TS(TypeScript)中Array数组无法调出使用includes方法,显示红色警告

解决方法 打开tsconfig.json文件&#xff0c;添加"lib": ["es7", "dom"]即可。 如下图所示。

php发送短信功能(创蓝短信)

一、以下是创蓝发送短信的功能&#xff0c;可以直接执行&#xff1a; <?php$phone 12312312312;$msg 测试短信功能;echo 发送手机号&#xff1a;.$phone.<br/>;echo 发送内容&#xff1a;.$msg.<br/>;$send sendMessage($phone, $msg);var_dump($send);…

军工单位如何做到安全跨网文件交换与导出的

在现代信息化战争中&#xff0c;军工单位在信息安全方面的需求尤为突出。跨网文件交换与导出作为军工单位日常运营的重要环节&#xff0c;面临着网络带宽限制、数据安全风险、合规性要求和传输稳定性等挑战。下面&#xff0c;我们将从以下几个方面探讨军工单位如何实现安全、高…

2024新数据库入门教程

1.官网下载MySQL 下载Mysql链接: 点击下载mysql 下载完成后解压到某一个文件夹&#xff08;记住这个路径&#xff0c;一会要用到&#xff09; 2.配置初始化文件my.ini 在根目录下创建一个txt文件&#xff0c;名字叫my&#xff0c;文件后缀为ini 以下代码除安装目录和数…