C语言——顺序表
文章目录
- 一、线性表
- 二、顺序表
- 顺序表和数组的区别
- 顺序表的分类
- 1.静态顺序表
- 2.动态顺序表
- 三、动态顺序表的实现
- 1.动态顺序表头文件
- 2.动态顺序表源文件
- 3.测试源文件
一、线性表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使
⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的
线性表在物理上存储时,通常以数组和链式结构的形式存储
二、顺序表
顺序表和数组的区别
顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接口
顺序表的分类
1.静态顺序表
概念:使⽤ 定⻓数组 存储元素


静态顺序表缺陷:空间给少了不够⽤,给多了造成空间浪费
2.动态顺序表
动态顺序表就是动态分配内存,可以根据需求调节数组大小


三、动态顺序表的实现
实现的主要思想:
1.初始化顺序表:先初始化arr为NULL,size为0,capacity为0
2.销毁顺序表:顺序表使用完成之后,把arr动态分配的内存释放掉
3.扩容顺序表:在每次插入数据之前必须先检查是否空间充足,不足则开辟更大的空间
4.增删查改顺序表:围绕数组去做即可,比较简单。增:头插,尾插,指定位置插入;删:包括头删,尾删,指定位置删除;查找数据。
1.动态顺序表头文件
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// 动态顺序表
// 按需申请
typedef int SLDateType;typedef struct SeqList
{SLDateType* arr;int size;//有效数据个数int capacity;//空间大小
}SL;void SLInit(SL* ps);//顺序表的初始化
void SLDestroy(SL* ps);//顺序表的销毁
void SLPrint(SL* ps);//顺序表的打印void SLCheckCapacity(SL* ps);//扩容//头部插入删除 / 尾部插入删除
void SLPushFront(SL* ps, SLDateType x);
void SLPushBack(SL* ps, SLDateType x);void SLPopFront(SL* ps);
void SLPopBack(SL* ps);//指定位置之前插入/删除数据
void SLInsert(SL* ps, int pos, SLDateType x);
void SLErase(SL* ps, int pos);//查找数据
int SLFind(SL* ps, SLDateType x);
2.动态顺序表源文件
#include "Seqlist.h"
//初始化
void SLInit(SL* ps)
{ps->arr = NULL;ps-> size = 0;ps->capacity = 0;
}
//销毁
void SLDestroy(SL* ps)
{if (ps->arr){free(ps->arr);}ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}//打印
void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->arr[i]);}printf("\n");
}//扩容
void SLCheckCapacity(SL* ps)
{if (ps->size == ps->capacity){//申请空间int NewCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLDateType* tmp = (SLDateType*)realloc(ps->arr, NewCapacity * sizeof(SLDateType));if (tmp == NULL){perror("realloc fail!");exit(1);//直接退出程序}ps->arr = tmp;ps->capacity = NewCapacity;}
}//头部插入
void SLPushFront(SL* ps, SLDateType x)
{assert(ps);SLCheckCapacity(ps);for (int i = ps->size-1;i >= 0;i--){ps->arr[i + 1] = ps->arr[i];}ps->arr[0] = x;ps->size++;
}//尾部插入
void SLPushBack(SL* ps, SLDateType x)
{assert(ps);SLCheckCapacity(ps);ps->arr[ps->size++] = x;
}//头部删除
void SLPopFront(SL* ps)
{assert(ps);assert(ps->size);for (int i = 0;i < ps->size-1;i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}//尾部删除
void SLPopBack(SL* ps)
{assert(ps);assert(ps->size);ps->size--;
}//在指定位置之前插入数据
void SLInsert(SL* ps, int pos, SLDateType x)
{assert(ps);assert(pos >= 0 && pos <= ps->size);SLCheckCapacity(ps);for (int i = ps->size-1;i >= pos;i--){ps->arr[i+1] = ps->arr[i];}ps->arr[pos] = x;ps->size++;
}//指定位置之前删除数据
void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);for (int i = pos;i < ps->size-1;i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}//查找数据
int SLFind(SL* ps, SLDateType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->arr[i] == x){return i;}}return -1;
}
3.测试源文件
最后可以在创建一个测试源文件去测试顺序表的正确性
#include "Seqlist.h"void test()
{SL s1;//测试初始化SLInit(&s1);//测试尾部插入SLPushBack(&s1, 1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);SLPushBack(&s1, 5);//测试打印SLPrint(&s1);//测试头部插入/*SLPushFront(&s1, 9);SLPushFront(&s1, 8);SLPushFront(&s1, 7);SLPushFront(&s1, 6);SLPushFront(&s1, 66);*///测试头删/*SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);*///测试尾删/*SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);*///测试在指定位置之前插入数据/*SLInsert(&s1, 3, 8);SLPrint(&s1);*///测试在指定位置之前删除数据/*SLErase(&s1, 1);SLPrint(&s1);*///测试查找int find = SLFind(&s1, 3);if (find != -1){printf("找到了!下标为%d\n", find);}else{printf("没有找到\n");}//测试销毁SLDestroy(&s1);
}int main()
{test();return 0;
}
相关文章:
C语言——顺序表
文章目录 一、线性表二、顺序表顺序表和数组的区别顺序表的分类1.静态顺序表2.动态顺序表 三、动态顺序表的实现1.动态顺序表头文件2.动态顺序表源文件3.测试源文件 一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种…...
CentOS7安装Docker及禅道
https://blog.csdn.net/weixin_46453070/article/details/136183615?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171246925816800222886233%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id171246925816800222886233&biz_i…...
如何在社交媒体中使用增强现实来提高客户参与度?
目录 1. 增强现实在社交媒体中的应用是如何发展的 2. 社交媒体营销和广告中的增强现实 3. 社交媒体上的增强现实滤镜和镜头 4. 社交媒体平台上的增强现实购物 5. 利用社交媒体的增强现实事件和品牌激活 6. 增强现实在社交媒体中的未来是什么 7. 社交媒体中的增强现实常见…...
Autodesk AutoCAD 2025 (macOS, Windows) - 自动计算机辅助设计软件
Autodesk AutoCAD 2025 (macOS, Windows) - 自动计算机辅助设计软件 AutoCAD 2024 开始原生支持 Apple Silicon,性能提升至 2 倍 请访问原文链接:https://sysin.org/blog/autodesk-autocad/,查看最新版。原创作品,转载请保留出处…...
买卖股票的最佳时机III
题目链接 买卖股票的最佳时机III 题目描述 注意点 1 < prices.length < 1000000 < prices[i] < 100000不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)最多可以完成 两笔 交易 解答思路 本题最多可以完成两笔交易,…...
fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化
为了 提供数据做后端回环优化和手动回环优化,需要保存每帧的点云和每帧的里程计为单独的文件,并且需要保存的名字为ros时间戳。 效果很好,比我自己写的手动回环模块好用 // This is an advanced implementation of the algorithm described in the // following paper: /…...
【线段树】【前缀和】:1687从仓库到码头运输箱子
本题简单解法 C前缀和算法的应用:1687从仓库到码头运输箱子 本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 线段树 LeetCode1687从仓库到码头运输箱子 你有一辆货运卡车,你需要用这一辆车…...
[AIGC] 实现博客平台的推荐排行榜
推荐排行榜是许多网站和平台的重要特性,它可以把最受欢迎或最具价值的内容展示给用户。本文将详细介绍如何为博客网站实现一个推荐排行榜。 文章目录 一、选择推荐指标二、收集数据三、设计排行榜算法四、显示推荐排行榜五、demo总结 一、选择推荐指标 实现推荐排行…...
C++利用键值对计算某一个数对应的最值及其索引位置
目录 一、算法概述二、代码实现1、计算最值2、计算最值及其索引 三、结果展示 本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法概述 类似下图所示,计算第一列中1或2对应的最…...
conda修改默认安装python版本为指定版本
1.查看conda中当前的python版本号: 打开Anaconda Powershell Prompt 输入python -V 回车会输出版本号 2.查看conda所支持的python版本,并选择指定版本安装 选择一个3.9.13版本的进行安装 安装命令: conda install python3.9.13 如果一直卡在这个画面,请使用管理员权限运行…...
显示学习番外篇(基于树莓派Pico) -- 游戏(TODO)
来自:11.4. 飞行小鸟 — mPython掌控 2.2.0 documentation (TODO)...
顺序表实战——基于顺序表的通讯录
前言:本篇文章主要是利用顺序表作为底层, 实现一个通讯录。偏向于应用, 对于已经学习过c的友友们可能没有难度了已经。没有学习过c的友友, 如果顺序表不会写, 或者说没有自己实现过, 请移步学习顺序表相关内…...
创建型模式--1.单例模式【巴基速递】
1. 巴基的订单 在海贼世界中,巴基速递是巴基依靠手下强大的越狱犯兵力,组建的集团海贼派遣公司,它的主要业务是向世界有需要的地方输送雇佣兵(其实是不干好事儿)。 自从从特拉法尔加罗和路飞同盟击败了堂吉诃德家族 &…...
用 Wireshark 解码 H.264
H264,你不知道的小技巧-腾讯云开发者社区-腾讯云 这篇文章写的非常好 这里仅做几点补充 init.lua内容: -- Set enable_lua to false to disable Lua support. enable_lua trueif not enable_lua thenreturn end-- If false and Wireshark was start…...
鸿蒙TypeScript学习第10天:【String(字符串)】
1、TypeScript String(字符串) String 对象用于处理文本(字符串)。 语法 var txt new String("string"); 或者更简单方式: var txt "string"; 2、String 对象属性 下表列出了 String 对象支…...
【201】Java8读取JSON树形结构并插入到MySQL数据库表中
我写了一个 maven 项目的 Demo,用来演示 JAVA8 如何读取 JSON 文件树形结构,并将这种树形结构保存到 MySQL 中。 json文件 city.json {"name": "山东省","sub": [{"name": "青岛市","sub"…...
AI“复活”:慰藉心灵还是触碰禁忌?一文看懂技术与伦理的较量|TodayAI
随着人工智能(AI)技术的迅猛发展,其应用领域也越来越广泛,不仅仅局限于数据分析、机器人自动化等传统领域,更是延伸到了一些人们曾经认为只存在于科幻小说中的领域。近年来,使用AI技术“复活”逝者的概念&a…...
Jackson @JsonUnwrapped注解扁平化 序列化反序列化数据
参考资料 Jackson 2.x 系列【7】注解大全篇三JsonUnwrapped 以扁平的数据结构序列化/反序列化属性Jackson扁平化处理对象 目录 一. 前期准备1.1 前端1.2 实体类1.3 Controller层 二. 扁平化序列反序列化数据2.1 序列化数据2.2 反序列化数据 三. 前缀后缀处理属性同名四. Map数…...
日期时间相关的类
分界线jdk8 jdk8之前和之后分别提供了一些日期和时间的类,推荐使用jdk8之后的日期和时间类 Date类型 这是一个jdk8之前的类型,其中有很多方法已经过时了,选取了一些没有过时的API //jdk1.8之前的日期 Date Date date new Date(); // 从1970年…...
微信小程序脚本的执行顺序
在小程序中的脚本执行顺序和浏览器中有所不同。 小程序的执行的入口文件是 app.js 。 并且会根据其中 require 的模块顺序决定文件的运行顺序,代码是一个 app.js 示例。 app.js /* a.js console.log(a.js) */ var a require(./a.js) console.log(app.js)/* b.js co…...
别只盯着Flag!从‘金盾信安杯’赛题看企业级安全实战:文件上传、源码泄露与RSA的坑
企业安全实战:从CTF赛题到真实威胁的防御之道 当安全工程师们在CTF竞赛中破解一道道赛题时,很少有人意识到这些看似游戏化的挑战背后,隐藏着企业安全防护体系中最致命的漏洞原型。本文将带您穿越虚拟赛场与真实战场之间的界限,揭示…...
2025届必备的AI学术方案实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术写作情形里,免费的人工智能论文工具达成了从文献查找、大纲制作直至…...
别再搞混了!Docker部署Redis Stack时,选redis/redis-stack还是redis/redis-stack-server?
Redis Stack镜像选择指南:开发与生产环境的最佳实践 在容器化技术普及的今天,Docker已成为部署Redis Stack的首选方案。但面对官方提供的两个相似镜像——redis/redis-stack和redis/redis-stack-server,许多开发者常陷入选择困境。本文将深入…...
GDBFrontend安全部署指南:保护调试会话的5个最佳实践
GDBFrontend安全部署指南:保护调试会话的5个最佳实践 【免费下载链接】gdb-frontend ☕ GDBFrontend is an easy, flexible and extensible gui debugger. Try it on https://debugme.dev 项目地址: https://gitcode.com/gh_mirrors/gd/gdb-frontend GDBFron…...
3分钟上手VSCode Mermaid Preview:在IDE中实现可视化图表实时预览
3分钟上手VSCode Mermaid Preview:在IDE中实现可视化图表实时预览 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 还在为编写Mermaid图表时需要在代码编辑器与预览…...
告别运行库安装烦恼:如何用VisualCppRedist AIO一站式解决Windows依赖问题
告别运行库安装烦恼:如何用VisualCppRedist AIO一站式解决Windows依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 在使用Windows电脑时&…...
Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句
Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句 你有没有过这样的经历?面对一个数据库,明明知道数据就在里面,却因为不懂SQL而束手无策。想查“上个月哪个产品卖得最好”,或者“找出最近三个月复购率最高的客户…...
AI编程实战:工具选型、效率提升与代码优化技巧
2026年,AI编程已进入“自动驾驶时代”,据行业数据显示,AI编程工具可使开发者效率提升30%-70%,中小企业开发成本降低70%,个人开发者可快速实现产品落地。对于开发者而言,熟练运用AI编程工具,不是…...
德希科技在线污泥浓度传感器
一、应用场景与产品定位 污泥浓度是污水处理生化系统稳定运行的关键控制指标,研发人员针对市政污水、工业废水处理厂曝气池、二沉池、氧化沟等场景的监测需求,推出散射光法在线污泥浓度传感器。设备以高稳定性、强抗干扰、长寿命的特性,适配…...
璀璨星河效果展示:古典结构×现代张力的Z-Image原生艺术生成
璀璨星河效果展示:古典结构现代张力的Z-Image原生艺术生成 “我梦见了画,然后画下了梦。” —— 文森特 梵高 今天,我想带你走进一个特别的数字艺术馆。在这里,冰冷的代码逻辑与炽热的艺术灵魂相遇,古典的审美结构与现…...
