【数据结构初阶】——顺序表

本文由@睡觉待开机原创,转载请注明出处。
本内容在csdn网站首发
欢迎各位点赞—评论—收藏
如果存在不足之处请评论留言,共同进步!

这里写目录标题

  • 1.数据结构
  • 2.顺序表
    • 线性表
    • 顺序表的结构
  • 3.动态顺序表的实现

在这里插入图片描述

1.数据结构

数据结构的概念:数据结构这个词可以拆分为“数据”和“结构”两个词,所谓数据就是我们存放在内存中的一系列数字而已,结构指的是组织数据的方式,整体而言,数据结构是计算机存储、组织数据的方式。

其中,数组就是一种最基本的数据结构。

2.顺序表

在介绍顺序表之前,我们先来了解一下线性表

线性表

线性表的概念:
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…


线性表的特点:
在逻辑结构上,是线性结构,也就是一条完整的线。
在物理结构上,则是一种不规则(不一定连续)的数据组织形式。


线性表的分类:
线性表包括:顺序表、链表、栈、队列、字符串…
在这里插入图片描述

顺序表的结构

在这里插入图片描述

//静态顺序表
typedef int int_n;
typedef struct seqlist
{int_n arr_n[100];int size_n;int capacity_n;
};//动态顺序表
typedef int int_t;
typedef struct SeqList
{int_t* arr;int size;int capacity;
}SL;

结论:由于动态顺序表的灵活优势,因而首选动态顺序表。

3.动态顺序表的实现

下面是一些功能函数声明和顺序表原型都放在.h文件中。
顺序表是由一个原型和一系列接口(功能)组成的:因而我们首先升级一个数组为动态顺序表原型:

//动态顺序表
typedef int int_t;
typedef struct SeqList
{int_t* arr;int size;int capacity;
}SL;

实现各种顺序表的功能接口:

//顺序表初始化的功能
void SLinit(SL* psl);
//顺序表尾插
void SLpushback(SL* psl,int_t n);
//顺序表头插
void SLpushfront(SL* psl,int_t n);
//顺序表中间插
void SLinnert(SL* psl, int pos, int_t n);
//顺序表打印
void SLprint(SL* psl);
//顺序表尾删
void SLpopback(SL* psl);
//顺序表头删
void SLpopfront(SL* psl);
//顺序表中间删
void SLpopinnert(SL* psl,int pos);

下面是具体实现一些函数功能接口:

#include"SeqList.h"
void SLinit(SL* psl)
{psl->arr = NULL;psl->size = psl->capacity = 0;
}void SLcheckcapacity(SL* psl)
{if (psl->capacity == psl->size){//刚开始是0,所以需要进行三目操作符int newcapacity = psl->capacity == 0 ? 4 : 2 * psl->capacity;int_t * t = (int_t*)realloc(psl->arr, newcapacity * sizeof(int_t));if (t == NULL){perror("reallloc fail!");exit(1);}psl->arr = t;psl->capacity = newcapacity;}
}void SLpushback(SL* psl,int_t n)
{assert(psl);//容量不足,需要先进行判断容量是否充足,在决定是否进行扩容SLcheckcapacity(psl);//容量充足,则直接插入psl->arr[psl->size] = n;psl->size++;
}void SLpushfront(SL* psl, int_t n)
{assert(psl);//扩容问题SLcheckcapacity(psl);//所有数字往后挪动一位int i = 0;for (i = psl->size; i > 0; i--){psl->arr[i] = psl->arr[i - 1];}//插入psl->arr[0] = n;psl->size++;
}void SLinnert(SL* psl, int pos, int_t n)
{assert(psl);assert(pos >= 0 && pos <= psl->size);//扩容问题SLcheckcapacity(psl);//中间插入,中间往后所有的数字往后挪动一位int i = 0;for (i = psl->size; i > pos; i--){psl->arr[i] = psl->arr[i - 1];}//插入数据psl->arr[pos] = n;psl->size++;
}void SLprint(SL* psl)
{int i = 0;for (i = 0; i < psl->size; i++){printf("%d ", psl->arr[i]);}printf("\n");
}void SLpopback(SL* psl)
{assert(psl->size && psl);psl->size--;
}
void SLpopfront(SL* psl)
{assert(psl && psl->size);int i = 0;for(i = 1; i<psl->size; i++){psl->arr[i-1] = psl->arr[i];}psl->size--;}void SLpopinnert(SL* psl, int pos)
{assert(pos >= 0 && pos < psl->size);int i = 0;for (i = pos; i < psl->size-1; i++){psl->arr[i] = psl->arr[i + 1];}psl->size--;
}

下面是测试代码源文件内容(在test.c文件中):

#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqList.h"int main()
{SL sl;SLinit(&sl);SLpushback(&sl,1);SLpushfront(&sl, 1);SLpushfront(&sl, 1);SLpushfront(&sl, 1);SLpushfront(&sl, 1);SLprint(&sl);SLinnert(&sl, 1, 3);SLprint(&sl);SLpopback(&sl);SLprint(&sl);SLpopfront(&sl);SLprint(&sl);SLpopinnert(&sl,3);SLprint(&sl);return 0;
}

在这里插入图片描述

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

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

相关文章

【JavaEE进阶】 Spring Boot⽇志

文章目录 &#x1f38b;关于日志&#x1f6a9;为什么要学习⽇志&#x1f6a9;⽇志的⽤途&#x1f6a9;日志的简单使用 &#x1f384;打印⽇志&#x1f6a9;程序中得到⽇志对象&#x1f6a9;使⽤⽇志对象打印⽇志 &#x1f38d;⽇志格式的说明&#x1f6a9;⽇志级别的作用&#…

QQ数据包解密

Windows版qq数据包格式&#xff1a; android版qq数据包格式&#xff1a; 密钥&#xff1a;16个0 算法&#xff1a;tea_crypt算法 pc版qq 0825数据包解密源码&#xff1a; #include "qq.h" #include "qqcrypt.h" #include <WinSock2.h> #include…

Win10下在Qt项目中配置SQlite3环境

资源下载 官网资源&#xff1a;SQLite Download Page 1、sqlite.h sqlite-amalgamation-3450000.zip (2.60 MiB) 2、sqlite3.def&#xff0c;sqlite3.dll sqlite-dll-win-x64-3450000.zip (1.25 MiB) 3、 win10下安装sqlite3所需要文件 sqlite-tools-win-x64-3450000.zipht…

node介绍

1.node是什么 Node是一个基于Chrome V8引擎的JS运行环境。 Node不是一个独立的语言、node不是JS框架。 Node是一个除了浏览器之外的、可以让JS运行的环境 Node.js是一个让JS运行在服务端的开发平台&#xff0c;是使用事件驱动&#xff0c;异步非阻塞I/O&#xff0c;单线程&…

fastJson和jackson的日期数据处理

目录 1.jackson 2.fastjson 3.总结 1.jackson jackson是spring mvc默认的JSON解析方法&#xff0c;前端的数据序列化处理之后&#xff0c;后端经过反序列化处理可以直接使用实体对象进行接收。后端接口返回实体对象&#xff0c;经过序列化处理后前端可以接收并进行处理。 …

回归预测 | Matlab基于ABC-SVR人工蜂群算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于ABC-SVR人工蜂群算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于ABC-SVR人工蜂群算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于ABC-SVR人工蜂群算法优化支持…

C++提高编程---模板---类模板

目录 一、类模板 1.模板 2.类模板的作用 3.语法 4.声明 二、类模板和函数模板的区别 三、类模板中成员函数的创建时机 四、类模板对象做函数参数 五、类模板与继承 六、类模板成员函数类外实现 七、类模板分文件编写 八、类模板与友元 九、类模板案例 一、类模板 …

第14章_集合与数据结构拓展练习(前序、中序、后序遍历,线性结构,单向链表构建,单向链表及其反转,字符串压缩)

文章目录 第14章_集合与数据结构拓展练习选择填空题1、前序、中序、后序遍历2、线性结构3、其它 编程题4、单向链表构建5、单向链表及其反转6、字符串压缩 第14章_集合与数据结构拓展练习 选择填空题 1、前序、中序、后序遍历 分析&#xff1a; 完全二叉树&#xff1a; 叶结点…

ElasticSearch的常用增删改查DSL和代码

es增删改查常用语法 我们日常开发中&#xff0c;操作数据库写sql倒是不可能忘记&#xff0c;但是操作es的dsl语句有时候很容易忘记&#xff0c;特地记录一下方便查找。 DSL语句 1、创建索引 -- 创建索引 PUT /my_index {"mappings": {"properties": {&…

Python实现Lasso回归模型

• Tibshirani(1996)提出了Lasso(The Least Absolute Shrinkage and Selectionator operator)算法。 • 通过构造一个一阶惩罚函数获得一个精炼的模型&#xff1b;通过最终确定一些指标&#xff08;变量&#xff09;的系数为零&#xff08;岭回归估计系数等于0的机会微乎其微&a…

【HarmonyOS】体验鸿蒙电商平台的未来之旅!

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

【堂堂狼人杀(定制开发)】

堂堂狼人杀游戏♨️风险规避与优势。?零投资也可参与规避五大风险 政策风险(点对点场外交易)账户风险(无资金池&#xff09; 推广风险(免费注册&#xff0c;注册送大礼包&#xff09; 网络风险(大平台&#xff0c;全网场外交易) 人脉风险(预约角色&#xff0c;强制出售) …

力扣hot100 相交链表 超全注释 满级表达

Problem: 160. 相交链表 文章目录 思路复杂度&#x1f496; Ac Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f469;‍&#x1f3eb; 参考图解 复杂度 时间复杂度: O ( n m ) O(nm) O(nm) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( 1 ) O(1) O(…

python 正则表达式学习(1)

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 1. 特殊符号 1.1 符号含义 模式描述^匹配字符串的开头$匹配字符串的末尾.匹配任意字符&#xff0c;除了换行符&#xff0c;当re.DOTALL标记被指定时&#xff0c;则可以匹配包…

飞书+ChatGPT+cpolar搭建企业智能AI助手并实现无公网ip远程访问

文章目录 推荐 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂…

用pandas实现用前一行的excel的值填充后一行

今天接到一份数据需要分析&#xff0c;数据在一个excel文件里&#xff0c;内容大概形式如下&#xff1a; 后面空的格子里的值就是默认是前面的非空的值&#xff0c;由于数据分析的需要需要对重复的数据进行去重&#xff0c;去重就需要把控的cell的值补上&#xff0c;然后根据几…

数字IC后端设计实现 | PR工具中到底应该如何控制density和congestion?(ICC2Innovus)

吾爱IC社区星友提问&#xff1a;请教星主和各位大佬&#xff0c;对于一个模块如果不加干预工具会让inst挤成一团&#xff0c;后面eco修时序就没有空间了。如果全都加instPadding会导致面积不够overlap&#xff0c;大家一般怎么处理这种问题&#xff1f; 在数字IC后端设计实现中…

Python内置的20个高阶函数的功能和示例详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python是一门功能丰富的编程语言&#xff0c;提供了许多内置函数来处理各种数据操作。其中&#xff0c;高阶函数是一类特殊的函数&#xff0c;它们接受其他函数作为参数&#xff0c;或者返回函数作为结果。高阶函…

如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?

今天boke112百科登录某个WordPress站点时&#xff0c;又出现“管理员邮件确认”的提示&#xff0c;要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示&#xff1a; 如果点击“稍后提醒我”&#xff0c;那么管理员邮件验证页面就会在3天后重新显示。 说实话&…

Unity - 简单音频

“Test_04” AudioTest public class AudioTest : MonoBehaviour {// 声明音频// AudioClippublic AudioClip music;public AudioClip se;// 声明播放器组件private AudioSource player;void Start(){// 获取播放器组件player GetComponent<AudioSource>();// 赋值…