C语言---顺序表(二)

文章目录

  • 前言
  • 1.准备工作
  • 2.代码的实现
    • 2.1.顺序表的创建、销毁和打印
    • 2.2.顺序表的扩容、头插\删、尾插\删
      • 2.2.1.扩容
      • 2.2.2.尾插
      • 2.2.3.头插
      • 2.2.3.尾删
      • 2.2.4.头删
    • 2.3.指定位置之前插入/删除数据/查找数据
      • 2.3.1.指定位置之前插入数据
      • 2.3.2.指定位置之前删除数据
      • 2.3.3.查找特定数据
  • 总结


前言

上一篇,我们认识到了顺序表,以及实现顺序表操作的相关函数,下面我们来一一实现。


1.准备工作

示例:
打开vs2022,创建三个文件在这里插入图片描述
其中SeqList.h头文件是用来记录的,相当于一本书的目录
SeqList.c文件是用来实现函数的,相当于各种公式
test.c是用来测试的。
记住:一个好的习惯是,写完一个函数,要测试一个函数。

2.代码的实现

2.1.顺序表的创建、销毁和打印

//初始化
void SLInit(SL* ps)
{ps->arr = NULL;ps->size = ps->capacity = 0;
}//销毁
void SLDestroy(SL* ps)
{if (ps->arr){free(ps->arr);}ps->capacity = ps->size = 0;
}
//打印
void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->arr[i]);}printf("\n");
}

这个代码较为简单。
思考:为什么向函数中传递形参时,是用指针,如果不是指针,会发生什么,大家可以试试。

2.2.顺序表的扩容、头插\删、尾插\删

2.2.1.扩容

//扩容
void SLCheckCapacity(SL* ps)
{if (ps->capacity == ps->size){int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SeqDataType* tmp = (SeqDataType*)realloc(ps->arr,sizeof(SeqDataType) * newCapacity);if (tmp == NULL){perror("realloc fail!");exit(1);}ps->capacity = newCapacity;ps->arr = tmp;}
}

2.2.2.尾插

void SLPushBack(SL* ps, SeqDataType x)
{assert(ps);//要判断arr空间是否充足SLCheckCapacity(ps);ps->arr[ps->size++] = x;}

2.2.3.头插

void SLPushFront(SL* ps, SeqDataType 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++;
}

2.2.3.尾删

尾删可能是最简单的,但是可能第一次想象不到,只需要size–即可,在输出的结果上一看,便是少了一个,并且也是最后一个。

void SLPopBack(SL* ps)
{assert(ps);assert(ps->arr);//删着删着,最后要是顺序表为空,要报警ps->size--;
}

2.2.4.头删

void SLPopFront(SL* ps)
{assert(ps && ps->arr);//删除第一个数字后,将后面的数字,移动到前面for (int i=0; i<ps->size-1; i++){ps->arr[i] = ps->arr[i+1];//arr[size-2]=arr[size-1]}ps->size--;
}

2.3.指定位置之前插入/删除数据/查找数据

2.3.1.指定位置之前插入数据

void SLInsert(SL* ps, int pos, SeqDataType x)
{assert(ps && ps->arr);assert(pos >= 0 && pos < ps->size);SLCheckCapacity(ps);for (int i = ps->size; i>pos; i--){ps->arr[i] = ps->arr[i-1];}ps->arr[pos] = x;ps->size++;
}

assert(pos >= 0 && pos < ps->size);为什么不是<=呢,是因为咱们得目的是让数据插入到指定位置之前,如果传入的位置是ps->size的话,最后的代码将会是在ps->size之后插入的,不符合需要的功能,所以是<

2.3.2.指定位置之前删除数据

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

2.3.3.查找特定数据

int SLFind(SL* ps, SeqDataType x)
{for (int i = 0; i < ps->size; i++)if (ps->arr[i] == x)return i;return -1;
}

总结

上面便是顺序表的常见的操作,大家可以根据代码,自己理解,并掌握。

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

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

相关文章

Okhttp全链路监控

目标&#xff1a; 1&#xff09;.监控网络请求的各个阶段 2&#xff09;获取每一个阶段的耗时和性能&#xff0c;用于性能分析。包括dns解析&#xff0c;socket连接时间&#xff0c;tls连接时间&#xff0c;请求发送时间&#xff0c;服务器接口处理时间&#xff0c;应答传输时…

44.基于SpringBoot + Vue实现的前后端分离-汽车租赁管理系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的汽车租赁管理系统设计与实现管理工作…

【数据结构与算法】:10道链表经典OJ

1. 移除链表元素 思路1&#xff1a;遍历原链表&#xff0c;将 val 所在的节点释放掉。(太麻烦) 思路2&#xff1a;创建新链表&#xff0c;再遍历原链表&#xff0c;找到不为 val 的节点尾插到新链表。 思路1代码实现如下&#xff1a; 注意&#xff1a; 1.当链表为空时&#x…

Pytorch: 利用预训练的残差网络ResNet50进行图像特征提取,并可视化特征图热图

1. 残差网络ResNet的结构 2.图像特征提取和可视化分析 import cv2 import time import os import matplotlib.pyplot as plt import torch from torch import nn import torchvision.models as models import torchvision.transforms as transforms import numpy as npimgname…

C++11 新特性:更强大的随机数功能

随机数的重要性 随机数在计算机科学中扮演着重要的角色&#xff0c;它们的应用非常广泛&#xff0c;包括但不限于&#xff1a; 加密和安全性&#xff1a;在加密算法中生成随机密钥&#xff0c;以确保通信的安全。模拟和建模&#xff1a;在科学研究和金融分析中&#xff0c;用…

NVIC中断分组和配置

NVIC中断分组合配置 NVIC是啥&#xff1f; NVIC是啥&#xff1f; NVIC 的全称是 Nested vectored interrupt controller&#xff0c;即嵌套向量中断控制器。 对于 M3/M4/M7 内核的 MCU&#xff0c;每个中断的优先级都是用寄存器中的 8 位来设置的。8 位的话就可 以设置 2^8 2…

syscall的检测与绕过

普通调用 #include <iostream> #include <windows.h>int main() {unsigned char shellcode[] "";void* exec VirtualAlloc(0, sizeof shellcode, MEM_COMMIT,PAGE_EXECUTE_READWRITE);memcpy(exec, shellcode, sizeof shellcode);CreateThread(NULL, …

mybaits(8)-缓存机制

缓存机制 1、mybatis缓存2、一级缓存2.1 开启一级缓存2.2 一级缓存失效 3、二级缓存3.1 开启二级缓存3.2 二级缓存什么时候失效3.3 二级缓存的相关配置 4、MyBatis集成EhCache 1、mybatis缓存 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高…

vue不正经指南

vue不正经指南 环境配置 asdf plugin add nodejs asdf install nodejs 16.20.2创建项目 npm create vitelatest my-vue-app -- --template vue npm install npm run dev修改调试端口 修改vite.config.js,修改如下所示&#xff0c;添加server的host和port。 import { defi…

Spring源码复习之AnnotatedBeanDefinitionReader

文章目录 一、简单描述二、源码分析三、最佳实践一、简单描述 AnnotatedBeanDefinitionReader是一个用于读取和解析带有注解的Bean定义的类,它主要用于基于注解的配置方式,允许开发者将Java类标记为Spring组件,从而让Spring容器自动扫描和注册这些组件,而不需要显式配置这…

macOS idea配置mysql

一、首先查看mysql是否配置好&#xff1a; 打开终端输入&#xff1a;mysql -u root -p&#xff1b;&#xff0c;如果是没有成功&#xff0c;则进行配置&#xff0c;配置过程如下&#xff1a; 1、输入&#xff1a;vim ~/.bash_profile 2、 输入 “i” 进入 insert 模式&#…

2024妈妈杯mathorcup数学建模C题 物流网络分拣中心货量预测及人员排班

一、数据预处理 数据清洗是指对数据进行清洗和整理&#xff0c;包括删除无效数据、缺失值填充、异常值检测和处理等。数据转换是指对数据进行转换和变换&#xff0c;包括数据缩放、数据归一化、数据标准化等。数据整理是指对数据进行整理和归纳&#xff0c;包括数据分组、数据聚…

面向对象的架构三段式写一篇论文

在面向对象的软件架构中&#xff0c;系统设计通常遵循一种“三段式”方法论&#xff0c;以确保软件的可扩展性、可维护性和灵活性。这种方法论包括三个核心阶段&#xff1a;概念化、详细设计和实现。通过这三个阶段的逐步深入&#xff0c;开发团队可以有效地应对复杂系统的挑战…

PDF转TXT ChatGPT编程

1.目的 在Z-library找到一本书&#xff0c;只不过是PDF格式的&#xff0c;看的时候体验不好&#xff0c;还没有办法保存记录&#xff0c;就想着能不能转成txt格式放到手机自带的小说软件中看。 不想去网上找相关的软件&#xff0c;可以还需要付钱&#xff0c;所以尝试用ChatGP…

springcloud-fegin 组件调用

一、Feign 概述 Feign是Netflix开发的声明式、模板化的HTTP客户端&#xff0c; Feign可以帮助我们更快捷、优雅地调用HTTP API。 在Spring Cloud中&#xff0c;使用Feign非常简单——创建一个接口&#xff0c;并在接口上添加一些注解&#xff0c;代码就完成了。Feign支持多种…

R: 支持向量机(Support Vector Machine,简称SVM)

在数据科学和机器学习领域中&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;是一种强大的监督学习算法&#xff0c;常用于分类和回归分析。它的优点之一是可以适用于复杂的数据集&#xff0c;并且在高维空间中表现良好。在本文中&am…

【示例】MySQL-MySQL中常见的锁

前言 本文主要讲述MySQL中常见的锁。 总结 | 各类别锁的名字 锁级别锁名字解释全局锁read lock全局锁只有可读锁表级锁 - 表锁read lock 表共享读锁write lock 表独占写锁表级锁 - 元数据锁&#xff08;meta data lock&#xff0c;MDL&#xff09;SHARED_READ_ONLYSHARED_NO…

OSPF实验

需求&#xff1a; 1、R1-R3为区域0&#xff0c;R3到R4为区域1&#xff1b;其中R3的环回也在区域0&#xff0c;P1-R3分别有一个环回接口 2、R1-R3 R3为DR设备&#xff0c;没有BDR 3、R4环回地址已固定&#xff0c;其他所有网段使用192.168.1.0/24进行合理分配 4、R4环回不能…

【golang】动态生成微信小程序二维码实战下:golang 生成 小程序二维码图片 并通过s3协议上传到对象存储桶 | 腾讯云 cos

项目背景 在自研的系统&#xff0c;需要实现类似草料二维码的功能 将我们自己的小程序&#xff0c;通过代码生成相想要的小程序二维码 代码已经上传到 Github 需要的朋友可以自取 https://github.com/ctra-wang/wechat-mini-qrcode 一、生成Qrcode并提交到对象存储 通过源生A…

Kubernetes(k8s):深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

Kubernetes&#xff08;k8s&#xff09;&#xff1a;深入理解 Kubernetes 中的污点&#xff08;Taints&#xff09;与容忍度&#xff08;Tolerations&#xff09; 1、污点&#xff08;Taints&#xff09;2、容忍度&#xff08;Tolerations&#xff09;3、示例演示-测试污点的具…