[数据结构]顺序表详解
目录
一.线性表
二.顺序表
2.1概念及结构
1. 静态顺序表:使用定长数组存储元素。
2. 动态顺序表:使用动态开辟的数组存储。
2.1按需申请
2.2 接口实现:增删查改
SeqList.h:
SeqList.c:
test.c
一.线性表
二.顺序表
2.1概念及结构
1. 静态顺序表:使用定长数组存储元素。
开少了不够用开多了浪费
#define N 100
typedef int SLDateType;
struct Seqlist
{SLDateType a[N];int size;
};
2. 动态顺序表:使用动态开辟的数组存储。
2.1按需申请
typedef int SLDateType;
struct Seqlist
{SLDateType *a;int size;//有效数据个数 这个个数跟空间大小一样的时候就扩容int capacity;//空间的容量
};
2.2 接口实现:增删查改
头插尾插的时间复杂度都为o(1)
头删尾删的时间复杂度都为o(n)
SeqList.h:
#ifndef SEQLIST_H
#define SEQLIST_H
#include <errno.h>
#include <stdlib.h>
#include<assert.h>
#include<stdio.h>
#define INIT_CAPACITY 10
typedef int SLDataType;
typedef struct Seqlist
{SLDataType* a;int size; // 有效数据个数int capacity; // 空间的容量
} SL;
//增删改查
void SeqInit(SL* s); // 初始化
void SLDestroy(SL* ps);//销毁
void SLPushBack(SL* ps, SLDataType x);//插入 尾插
void SLPopBack(SL* ps);//删除 尾删
void SLPushFront(SL* ps, SLDataType x);//插入 头插
void SLPopFront(SL* ps);//删除 尾删
void SLInsert(SL* ps, int pos, SLDataType x);//在某个位置插入
void SLErase(SL* ps, int pos);//在某个位置删除
int SLFind(SL* ps, SLDataType x);//查找x元素的下标
void SLEtdCapacity(SL* ps);//扩容
void SLPrint(SL* ps);//打印
#endif // SEQLIST_H
SeqList.c:
#include "SeqList.h"
//打印
void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->a[i]);}
}
//扩容
void SLEtdCapacity(SL* ps)
{//如果空间不够,扩容if (ps->size == ps->capacity){SLDataType* tmp = (SLDataType*)realloc(ps->a, sizeof(SLDataType) * ps->capacity);if (tmp == NULL){perror("realloc fail");return;}ps->capacity *= 2;ps->a = tmp;}
}
//初始化
void SeqInit(SL* s)
{s->a = (SLDataType*)malloc(sizeof(SLDataType) * INIT_CAPACITY);if (s->a == NULL){perror("malloc fail");return;}s->size = 0;s->capacity = INIT_CAPACITY;
}
//销毁
void SLDestroy(SL* ps)
{free(ps->a);ps->a = NULL;ps->capacity = ps -> size = 0;
}
//尾插
void SLPushBack(SL* ps, SLDataType x)
{SLEtdCapacity(&ps);//扩容ps->a[ps -> size] = x;ps->size++;
}
//尾删
void SLPopBack(SL* ps)
{assert(ps->size>0);ps->size--;
}
//头插
void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLEtdCapacity(&ps);//扩容int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];--end;}ps->a[0] = x;ps->size++;
}
//头删
void SLPopFront(SL* ps)//删除 头删
{assert(ps);assert(ps->size > 0);//表不能为空int begin = 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}
//在某个位置插入
void SLInsert(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos <= ps->size);//如果pos等于size相当于尾插SLEtdCapacity(&ps);int end = ps->size - 1;while (end >= pos)//类似于头插{ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;
}
//在某个位置删除
void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);//删除的时候不能等于sizeint begin = pos + 1;while (begin < ps->size){ps->a[begin-1] = ps->a[begin];begin++;}ps->size--;
}
//查找x元素的下标
int SLFind(SL* ps, SLDataType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->a[i] == x){return i;}}return -1;
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"
void TestSeqList1()
{SL s;SeqInit(&s);SLPushFront(&s, 1);SLPushFront(&s, 2);SLPushFront(&s, 3);SLPrint(&s);printf("\n");SLPopFront(&s);SLPopFront(&s);SLPrint(&s);
}
int main()
{TestSeqList1();return 0;
}
相关文章:
[数据结构]顺序表详解
目录 一.线性表 二.顺序表 2.1概念及结构 1. 静态顺序表:使用定长数组存储元素。 2. 动态顺序表:使用动态开辟的数组存储。 2.1按需申请 2.2 接口实现:增删查改 SeqList.h: SeqList.c: test.c 一.线性表 线性表 ( line…...
GO语言的安装以及第一个Go语言程序
1. Go语言的安装与设置 官网:golang.org 国内下载:https://studygolang.com/dl 国内镜像:https://goproxy.cn/ 2. GOland的安装 Go 1.13 及以上(推荐) 打开你的终端并执行 $ go env -w GO111MODULEon $ go env -w GOPROXYhttps://goproxy.cn,direc…...
SpringBoot速成(12)文章分类P15-P19
1.新增文章分类 1.Postman登录不上,可以从头registe->login一个新的成员:注意,跳转多个url时,post/get/patch记得修改成controller类中对应方法上写的 2.postman运行成功: 但表中不更新:细节有问题: c是…...
notepad++右键菜单不见了
卸载时没点击完成,又重新安装了一个,最终导致了一些bug,导致右键没有notepad菜单。 解决方式: 新建一个register.reg文件,加入以下代码,然后双击执行即可 代码说明:Open with Notepad 是右…...
Spring 接入 DeepSeek
引入依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>2.yml配置 spring:ai:openai:api-key: sk-xxxxx // 填写自己申请的keybase-url: http…...
开题报告——基于Spring Boot的社区居民健康管理平台的设计与实现
关于本科毕业设计(论文)开题报告的规定 为切实做好本科毕业设计(论文)的开题报告工作,保证论文质量,特作如下规定: 一、开题报告是本科毕业设计(论文)的必经过程,所有本科生在写作毕业设计(论文)之前都必须作开题报告。 二、开题报告主要检验学生对专业知识的驾…...
(leetcode42 前缀后缀最值)接雨水
记忆化:打比方说前缀和 dp数组每个值代表了某一段计算过程 直接取值无需再计算就是记忆化 问题的核心思路 为了计算每个位置能接住多少水,我们需要知道在每个位置上方的水的容量。假设位置 i 是某个柱子的底部,要计算它能接多少水ÿ…...
SpringBoot+uniApp日历备忘录小程序系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.日历渲染代码:2.保存备忘录代码:3.删除备忘录代码: 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootuniApp框架开…...
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现 目录 分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现MFO-LSSVM飞蛾扑火算法优化最小二…...
Linux 和 Windows 区别
1. 文件组织 (1)目录结构 Linux:采用**单一根目录(/)**结构,所有文件和设备都挂载在这个目录下。 典型目录: /home/(用户目录)/etc/(配置文件)/bin/(系统可执行文件)/dev/(设备文件)/mnt/(挂载点)Windows:采用多个驱动器(C:\, D:\),每个分区是一个独立的…...
Android - Handler使用post之后,Runnable没有执行
问题:子线程创建的Handler。如果 post 之后,在Handler.removeCallbacks(run)移除了,下次再使用Handler.postDelayed(Runnable)接口或者使用post时,Runnable是没有执行。导致没有收到消息。 解决办法:只有主线程创建的…...
vscode通过ssh连接服务器实现免密登录+删除
文章目录 参考: 1、 vscode通过ssh连接服务器实现免密登录删除(吐血总结)...
Redis未授权访问漏洞原理
redis未授权访问漏洞 目录 redis未授权访问漏洞一、Redis介绍二、redis环境安装三、漏洞原理四、漏洞复现4.1 webshell提权4.2redis写入计划任务反弹shell4.3 ssh key免密登录4.4 Redis基于主从复制的RCE方式 五、Redis加固建议 一、Redis介绍 Redis,全称为Remote …...
喜报!博睿数据案例获经观传媒“2024年度数字转型创新案例”!
本文已在“经观”APP中发表,点击下方文章链接查看原文: 2024科技创变纪:创新破局 变量启新 近日,经济观察报“2024年度卓越创新实践案例”榜单评选结果正式公布。博睿数据选送的案例“从零到一:可观测体系建设的探索…...
【从0做项目】Java搜索引擎(4)——性能优化~烧脑~~~
本篇文章将对项目搜索引擎(1)~(3)进行性能优化,包括测试,优化思路,优化前后对比 目录 一:文件读取 二:实现多线程制作索引 1:代码分析 2:代码…...
什么是网络安全审计?网络安全审计的作用...
网络安全审计通过对网络数据的采集、分析、识别,实时动态监测通信内容、网络行为和网络流量,发现和捕获各种敏感信息、违规行为,实时报警响应,全面记录网络系统中的各种会话和事件,实现对网络信息的智能关联分析、评估…...
目前(2025年2月)计算机视觉(CV)领域一些表现优异的深度学习模型
按任务类型分类介绍: 图像分类 CoCa:结合对比学习和生成学习,通过对比损失对齐图像和文本嵌入,并使用标题生成损失预测文本标记。它在图像分类、跨模态检索和图像描述等任务中表现出色,且仅需极少的任务特定微调。 P…...
【核心算法篇十三】《DeepSeek自监督学习:图像补全预训练方案》
引言:为什么自监督学习成为AI新宠? 在传统监督学习需要海量标注数据的困境下,自监督学习(Self-Supervised Learning)凭借无需人工标注的特性异军突起。想象一下,如果AI能像人类一样通过观察世界自我学习——这正是DeepSeek图像补全方案的技术哲学。根据,自监督学习通过…...
【详解】神经网络的发展历程
在人工智能与机器学习的漫长演进史中,神经网络一直扮演着引领创新的关键角色。从最早的生物学启发到当代“深度学习”浪潮,神经网络的发展历程波澜壮阔。随着计算机硬件水平的提升与海量数据的激增,神经网络不仅在学术界受到高度关注…...
【Linux专栏】find命令+同步 实验
Linux & Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.实验背景 需要把一个目录中所有文件,按照目录把某个时间点之前的同步到一个盘中,之后的同步备份到另一个盘中,实现不同时间段的备份。 本次实现目标:把common文件夹中 2025年之后的含文件夹…...
【弹性计算】虚拟机云服务器
虚拟机云服务器 1.云计算技术概述2.虚拟机云服务器2.1 功能特点2.2 适用场景 “计算” 位居弹性计算的三大件之首,也是弹性计算的主题词。在公共云上,计算产品不仅有既基础又重要的 虚拟机云服务器,而且包含了近年来为了满足用户的多样化需求…...
C++ 中的public、private 和 protected
在 C 里,public、private 和 protected 是用于控制类成员(属性和方法)访问权限的访问修饰符。合理使用这些访问修饰符能实现数据封装和信息隐藏,增强代码的安全性和可维护性。下面详细介绍它们的特性和用法。 public(…...
vite配置scss全局变量
vite配置scss全局变量 创建单独文件variable.scss在其中定义变量 vite.config.ts中配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vite.dev/config/ export default defineConfig({plugins: [vue()],resolve:…...
Qt开发①Qt的概念+发展+优点+应用+使用
目录 1. Qt的概念和发展 1.1 Qt的概念 1.2 Qt 的发展史: 1.3 Qt 的版本 2. Qt 的优点和应用 2.1 Qt 的优点: 2.2 Qt 的应用场景 2.3 Qt 的应用案例 3. 搭建 Qt 开发环境 3.1 Qt 的开发工具 3.2 Qt SDK 的下载和安装 3.3 Qt 环境变量配置和使…...
FastGPT快速将消息发送至飞书
欢迎关注【AI技术开发者】 在很多企业内部场景下,都需要发送数据到内部交流软件,如飞书、钉钉、企业微信 本文就以飞书为例,企业内部其他同事上报故障后,自动发送消息到飞书, 并相关人员 前文中,使用coz…...
qsort介绍与实现
qsort qsort 是 C 标准库中的一个通用排序函数,位于 <stdlib.h> 头文件中。它可以对任意类型的数组进行排序,使用的是快速排序(Quick Sort)算法的变种。 参数说明 base:指向要排序的数组的第一个元素的指针。由…...
WPF创建自定义类和控件及打包成dll引用
WPF创建自定义类和控件及打包成dll引用 一、前言二、创建自定义类和控件并生成dll文件2.1创建类库项目2.2创建自定义类和控件2.3生成dll文件 三、在其他项目中引用3.1添加dll文件引用3.2cs文件中引用命名空间3.3XAML文件中引用命名空间 一、前言 出于一些代码复用的需求&#…...
DVWA-DOM型XSS全等级绕过方法
DOM型XSS全等级绕过 前言一、LOW级别二、Medium级别 图片插入语句法 三、High级别 字符 # 绕过服务端过滤 四、Impossible级别 前言 DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档…...
《[含文档+PPT+源码等]精品基于Python实现的Django中药材在线学习系统的设计与实现
基于Python实现的Django中药材在线学习系统的设计与实现背景,可以从以下几个方面进行阐述: 一、行业背景 随着中医药在全球范围内的不断推广和普及,中药材的知识普及和在线学习需求日益增长。传统的中药材学习方式往往受限于地域、时间和资…...
halcon激光三角测量(二十三)inspect_3d_surface_intersections
目录 一、inspect_3d_surface_intersections代码第一部分二、inspect_3d_surface_intersections代码第二部分三、inspect_3d_surface_intersections代码第三部分 一、inspect_3d_surface_intersections代码第一部分 1、创建一个未标定的激光三角测量模型 2、获得参考3D Model&…...
