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

news2024/12/25 2:38:12

本文由@睡觉待开机原创,转载请注明出处。
本内容在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.coloradmin.cn/o/1402591.html

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

相关文章

YOLOv8改进 | Conv篇 | 2024.1月最新成果可变形卷积DCNv4(全网独家首发,附详细教程)

一、本文介绍 本文给大家带来的改进机制是2024-1月的最新成果DCNv4,其是DCNv3的升级版本,效果可以说是在目前的卷积中名列前茅了,同时该卷积具有轻量化的效果!一个DCNv4参数量下降越15Wparameters左右,。它主要通过两个方面对前一版本DCNv3进行改进:首先,它移除了空间聚…

【数据结构与算法】1.数据结构绪论

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

Spring Authorization Server入门 (二十) 实现二维码扫码登录

实现原理 打开网页&#xff0c;发起授权申请/未登录被重定向到登录页面选择二维码登录&#xff0c;页面从后端请求二维码页面渲染二维码图片&#xff0c;并轮询请求&#xff0c;获取二维码的状态事先登录过APP的手机扫描二维码&#xff0c;然后APP请求服务器端的API接口&#…

Mybatis 动态SQL条件查询(注释和XML方式都有)

需求 : 根据用户的输入情况进行条件查询 新建了一个 userInfo2Mapper 接口,然后写下如下代码,声明 selectByCondition 这个方法 package com.example.mybatisdemo.mapper; import com.example.mybatisdemo.model.UserInfo; import org.apache.ibatis.annotations.*; import j…

Unity New Input System 及其系统结构和源码浅析【Unity学习笔记·第十二】

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132534422 作者&#xff1a;CSDN|Ringleader| 主要参考&#xff1a; 官方文档&#xff1a;Unity官方Input System手册与API官方测试用例&#xff1a;Unity-Technologies/InputS…

2024/1/21周报

文章目录 摘要Abstract文献阅读题目问题与创新方法RNN网络LSTM网络目标变量与外部变量的相关性 实验数据集评估准则参数设置实验结果 深度学习GRU网络结构介绍前向传播过程反向传播过程简单的GRU代码实现 总结 摘要 本周阅读了一篇基于LSTM的深度学习模型用于长期旅游需求预测…

大数据开发之Kafka(概述、快速入门、生产者)

第 1 章&#xff1a;Kafka概述 1.1 定义 Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff0c;主要应用于大数据实时处理领域。 发布/订阅&#xff1a;消息的发布者不会将消息直接发送给特定的订阅者&#xff0c;而是将发布的消息分为不同的类别&#xff0c;订阅者只…

性能测试、分析、优化

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 前言 理论来源于实践又服务于实践&#xff0c;在笔者…

【算法与数据结构】518、LeetCode零钱兑换 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题的硬币是无数的&#xff0c;因此本题可以抽象成一个完全背包问题。完全背包和01背包的不同之处在于…

LoadRunner从零开始之接触LoadRunner

LoadRunner 是Mercury Interactive 公司开发的一款成熟的性能测试工具&#xff0c;LoadRuner 作为性能测试的实现者&#xff0c;涉及了性能测试流程、性能测试技术和软件 体系架构等众多方面的知识点&#xff0c;可以说&#xff0c;学习LoadRuner 是理解和学习性能测试 的非常好…

常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)

前言 有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法&#xff0c;观察者模式&#xff0c;策略模式) 工程方法 定义 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。 ——《设…

Spring Boot 优雅实现统一数据返回格式+统一异常处理+统一日志处理

在我们的项目开发中&#xff0c;我们都会对数据返回格式进行统一的处理&#xff0c;这样可以方便前端人员取数据&#xff0c;当然除了正常流程的数据返回格式需要统一以外&#xff0c;我们也需要对异常的情况进行统一的处理&#xff0c;以及项目必备的日志。 1. 统一返回格式 …

【小沐学GIS】基于C++绘制三维太阳系SolarSystem(OpenGL、glfw、glut)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

深度学习基础之数据操作

深度学习中最常用的数据是张量&#xff0c;对张量进行操作是进行深度学习的基础。以下是对张量进行的一些操作&#xff1a; 首先我们需要先导入相关的张量库torch。 元素构造&#xff08;初始化&#xff09; 使用arange创造一个行向量&#xff0c;也就是0轴&#xff08;0维&a…

LabVIEW 2023下载安装教程,附安装包和工具,免费使用,无套路获取

前言 LabVIEW是一种程序开发环境&#xff0c;提供一种图形化编程方法&#xff0c;可可视化应用程序的各个方面&#xff0c;包括硬件配置、测量数据和调试&#xff0c;同时可以通过FPGA数学和分析选板中的NI浮点库链接访问浮点运算功能库&#xff0c;LabVIEW软件是NI设计平台的…

西圣H1头戴式耳机发布,不止音质惊艳,更有舒适听音体验

近日&#xff0c;深耕智能声学领域多年的 xisem西圣品牌‏‏发布——‏西圣H1头戴式主动降噪蓝牙耳机正式迎来首销。从各个方面来看&#xff0c;这款头戴式耳机展现出了极具颠覆性的创新&#xff0c;不仅在音质和降噪性能上表现出色&#xff0c;更重要的是采用了更加轻巧的佩戴…

使用记事本修复DBC文件问题V3.0

要麻了&#xff0c;竟然写到3.0了。 有个信号解析不出来&#xff0c;同一条报文的其他信号可以正确解析&#xff0c;打开DBC检查&#xff0c;位置长度都是正确的&#xff0c;死活解析不出来。 打开记事本 发现他居然在信号后面加了个回车&#xff0c;就产生了上面这种诡异的情…

js实现九九乘法表

效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script type"text/javascript">// 输出乘法口诀表// document.write () 空格 " " 换行…

微电网优化MATLAB:火鹰优化算法(Fire Hawk Optimizer,FHO)求解微电网优化(提供MATLAB代码)

一、火鹰优化算法FHO 火鹰优化算法&#xff08;Fire Hawk Optimizer&#xff0c;FHO&#xff09;由Mahdi Azizi等人于2022年提出&#xff0c;该算法性能高效&#xff0c;思路新颖。 单目标优化&#xff1a;火鹰优化算法&#xff08;Fire Hawk Optimizer&#xff0c;FHO&#…

QKCP容器平台安装qkcp paas deployment

22年底23年初做的容器云平台的项目&#xff0c;该份是当初实施部署真实生产环境的手册&#xff0c;关键ip和端口已经更改&#xff0c;现贴来给大伙参阅。 x公司qkcp容器平台安装部署手册 目录 x公司qkcp容器平台安装部署手册 1 集群基础环境 3 1.1. 集群规划信息 3 1.2. 标准…