数据结构——顺序表基础知识

初识数据结构之入门必懂——线性表(顺序表) 本文将介绍数据结构中的线性表与线性表中最简单的结构——顺序表 阅读详情

头文件:

#pragma once


#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <assert.h>


//////////////////////////////////////////////////////////////////////


//定义顺序表
#define MAX_SIZE 10
typedef int DataType;
typedef struct SeqList
{
DataType _array[MAX_SIZE];
int _size;
}SeqList, *PSeqList;


typedef struct SeqList SeqList;
typedef struct SeqList* PSeqList;


void SeqListlnit(PSeqList ps);                           // 初始化顺序表
void SeqListPushBack(PSeqList ps, DataType data);        //尾插
void SeqListPopBack(PSeqList ps);                        //尾删
void SeqListPushFront(PSeqList ps, DataType data);       //头插
void SeqListPopFront(PSeqList ps);                       //头删
void SeqListInsert(PSeqList ps, int pos, DataType data);  //在任意位置(pos位置)插入元素data
void SeqListErase(PSeqList ps, int pos);                  //删除任意位置(pos位置)的元素
void Remove(PSeqList ps, DataType data);                 //移除顺序表中第一个值为data的元素
void RemoveAll(PSeqList ps, DataType data);              //移除所有值为data的元素
int PSeqListFind(PSeqList ps, DataType data);            //找到顺序表中数值为data的元素,并且返回其位置,否则返回-1
int PSeqListSize(PSeqList ps);                              //求出顺序表中元素的个数
void SeqListPrint(PSeqList ps);                          //打印顺序表




////////////////////////////////////////////////////////////////////////////////////////////

顺序表的基础功能实现函数

#define _CRT_SECURE_NO_WARNINGS


#include "SeqList.h"




//打印顺序表
void SeqListPrint(PSeqList ps)
{
assert(ps);


int tem = 0;
printf("顺序表为:");
for (; tem < ps->_size; tem++)
{
printf("%d ", ps->_array[tem]);
}
printf("\n");
}


//初始化
void SeqListlnit(PSeqList ps)
{
assert(ps);
memset(ps, 0, sizeof(DataType)*MAX_SIZE);    //将ps多指向的内存全部赋值为0
ps->_size = 0;
}


//尾插
void SeqListPushBack(PSeqList ps, DataType data)
{
assert(ps);
ps->_array[ps->_size] = data;     //对size(正好是顺序表最后)进行赋值
ps->_size++;
}




//尾删
void SeqListPopBack(PSeqList ps)
{
assert(ps);


if (ps->_size == 0)      //判断顺序表中是否有数据
{
return;
}
ps->_size--;    ///直接减少数据个数  不清空数据
}


//头插
void SeqListPushFront(PSeqList ps, DataType data)
{
assert(ps);


int tem;


for (tem = ps->_size; tem > 0; tem--)
{
ps->_array[tem] = ps->_array[tem - 1];   //交换顺序表中的数据
}


ps->_array[0] = data;     // 将数据插入到顺序表开头
ps->_size++;


}


//头删
void SeqListPopFront(PSeqList ps)
{
assert(ps);


if (ps->_size == 0)      //判断顺序表中是否有数据
{
return;
}


int tem = 0;


for (; tem < ps->_size - 1; tem++)
{
ps->_array[tem] = ps->_array[tem + 1];    ///  直接覆盖第一个数据
}
ps->_size--;         ///数据个数减1
}




//在任意位置(pos位置)插入元素data
void SeqListInsert(PSeqList ps, int pos, DataType data)
{
assert(ps);


if (ps->_size == 0)    //判断顺序表中是否有数据
{
return;
}


int tem = 0;


tem = ps->_size;
for (; tem >= ps->_size - pos + 1; tem--)
{
ps->_array[tem] = ps->_array[tem - 1];    //将pos位置后面的数据依次往后移一位
}


ps->_array[pos - 1] = data;     // 将数据data 赋值于 pos位置


ps->_size++;      // 数据个数加1
}




//删除任意位置(pos位置)的元素
void SeqListErase(PSeqList ps, int pos)
{
assert(ps);


if (ps->_size == 0)    //判断顺序表中是否有数据
{
return;
}


int tem = 0;
for (tem = pos - 1; tem < ps->_size; tem++)
{
ps->_array[tem] = ps->_array[tem + 1];
}
ps->_size--;
}




//移除顺序表中第一个值为data的元素
void Remove(PSeqList ps, DataType data)
{
assert(ps);


int tem = 0;


if (ps->_size == 0)     //判断顺序表表中是否有元素
{
return;
}


tem = PSeqListFind(ps, data); //找到第一个值为data的元素位置


SeqListErase(ps, tem);    //删除此位置的元素
}






//移除所有值为data的元素
void RemoveAll(PSeqList ps, DataType data)
{
assert(ps);


int tem = 0;
int count = 0;
int str = 0;


if (ps->_size == 0)     //判断顺序表表中是否有元素
{
return;
}


while (tem < ps->_size)   //遍历顺序表
{
if (data == ps->_array[tem])  //找到data位置
{
tem++;                   
count++;
}
ps->_array[str] = ps->_array[tem];   //  重新对顺序表进行赋值
tem++;
str++;
}
}




//找到顺序表中数值为data的元素,并且返回其位置,否则返回-1
int PSeqListFind(PSeqList ps, DataType data)
{
assert(ps);


int tem = 0;


if (ps->_size == 0)
{
return -1;
}


for (; tem < ps->_size; tem++)
{
if (ps->_array[tem] == data)
{
return tem + 1;
}
}
}




//求出顺序表中元素的个数
int PSeqListSize(PSeqList ps)
{
assert(ps);

return ps->_size;

}



测试主函数:

#define _CRT_SECURE_NO_WARNINGS


#include "SeqList.h"


int main()
{
SeqList Seq;
int scr = 0;
SeqListlnit(&Seq);
SeqListPushBack(&Seq, 1);
SeqListPushBack(&Seq, 3);
SeqListPushBack(&Seq, 9);
SeqListPushBack(&Seq, 4);
SeqListPushBack(&Seq, 3);
SeqListPrint(&Seq);




RemoveAll(&Seq, 3);
Remove(&Seq, 9);


scr = PSeqListSize(&Seq);


printf("顺序表中有 %d 个元素\n", scr);
scr = PSeqListFind(&Seq, 3);
printf(" 4 出现在顺序表中的第 %d 个\n", scr);
SeqListPrint(&Seq);






RemoveAll(&Seq, 3);     // 移除顺序表中所有数值为3的元素
Remove(&Seq, 9);            //移除顺序表中数值为9的元素
SeqListErase(&Seq, 3);     //删除顺序表中第3位置的数据
SeqListInsert(&Seq, 3, 9); //在顺序表中第3位置插入数据9
SeqListPopBack(&Seq);  //尾删
SeqListPopFront(&Seq);   //头删
SeqListPushFront(&Seq, 0); // 头插
return 0;

}



各位大佬给意见  谢谢!

顺序表知识点图文详解 顺序表知识点详细总结包括顺序表的初始化、销毁线性表、求线性表的长度、求线性表中第i个元素、按值查找、插入元素、删除元素的方法。 阅读详情

相关推荐

数据结构基础知识概念 数据结构的逻辑结构: 线性表 顺序表 链表 栈和队列 栈的链式存储: 队列的链式存储:

目录 数据结构是什么? 数据结构的存储结构: 线性表 树存储结构 图存储结构 一、基本概念 2、算法的基本概念 二、线性表 三、栈和队列 四、树、二叉树 五、图 六、查找 七、排序 数据结构是什么? 我认为,数据结构是一门学科,它教会我们“如何存储具有复杂关系的数据更有助于后期对数据的再利用”。 数据结构的存储结构: 线性表,还可细分为顺序表、链表、栈和队列; 树结构,包括普通树,二叉树,线索二叉树等; 图存储结构; 线性表 线性表结构...

ZhangJiqun&191cm&85kg 664

【数据结构】顺序表与链表基础知识的超详细详解

线性表、顺序表、链表的基础知识与编码实现

小刘好好学习的博客 1050

【数据结构】 [特殊字符] 顺序表详解——数据结构的第一块基石

线性表(Linear List)。所谓线性表,就是“零个或多个数据元素的有限序列”,听起来有点抽象,我们换个说法👇可以把它想象成一条火车,每一节车厢就是一个“元素”,每一节车厢有且只有一个前车厢(除第一节)和一个后车厢(除最后一节)。100// 最大容量// 元素类型可自定义// 存储元素的数组int length;// 当前长度(有效元素个数)} SqList;这里的SqList:存放数据元素的数组;length:记录当前表中实际存放了多少个元素。

yy_xzz的博客 917

顺序表的基础知识

顺序表顺序表的定义 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储;即通过数据元素物理存储的连续性来反应元素之间逻辑上的相邻关系。 采用顺序存储结构存储的线性表通常简称为顺序表。 顺序表的定义 ...

m0_46527751的博客 1201

(南京观海微电子)——GH700X调试指南--SPI 接口+LVDS-测试盒使用方法

1表示OTP完成后,读取烧录值是否一致来判断是否烧录成功,2表示同时检测VCOM是否一致以及烧录次数是否增加,3表示不做任何检测,由用于自行在程序中判断。[格式]:SetFindVcomEn (<开启或关闭>),ON表示开启VCOM搜寻,默认是开启的,只要使能OTP烧录,按OTP按键则进行VCOM查询;[功能]:OTP完成检测类别,用于设置OTP完成后检测OTP次数还是OTP值来判断OTP是否成功。[功能]:用于设置VCOM查询使能,比如需要烧全代码而不需要对VCOM查询时,可以禁止VCOM查询。

m0_75095200的博客 1666

tiktok算法协议研究

经过上述分析,可以确定目标字符串来源于一段 JSON 数据,而这段 JSON 数据来自于一个经过加密的本地文件。对字符串 "sdi_v2" 进行 SHA-1 计算,得到 20 字节的结果;将第一步得到的数据进行MD5计算,生成16字节的结果;将第二步的结果转换为十六进制字符串,从而得到 32 字节的密钥。写这种算法分析的帖子真的是太无聊了,就先分析到这里吧,后续有机会再来谈下被加密的本地文件是怎么来的!!自我感觉TT的算法并不难,就是量太大了,所以我想问问有没有感兴趣的朋友来一起分析,欢迎联系。

2503_90751938的博客 2577

顺序表的相关知识

顺序表的基本操作 (1)顺序表的初始化 顺序表的初始化就是把顺序表 初始化为空的顺序表,只需把顺序表的长度length置为0即可; void InitList(PSeqList L) { if (L == NULL) { return; } L->length = 0; } (2)求顺序表的长度 顺序表的长度就是就顺序表中的元素的...

Adavinajh的博客 1189

Altium Designer 超详细入门教程

本文是一份Altium Designer新手入门教程,详细介绍了从软件基础到PCB制版的全流程。主要内容包括:软件界面介绍与工程创建方法;原理图设计中的元件放置、电气连线、标注添加等操作;PCB设计的布局布线、铺铜和DRC检查;Gerber和钻孔文件的导出方法。教程还提供了分类整理的实用快捷键表和新手避坑指南,强调原理图编译和DRC检查的重要性。通过本教程,新手可以快速掌握AD基本操作,完成简单电路板的设计与制版文件导出。

学习中...... 823

【基础知识】顺序表

顺序表可以理解为一种特殊的数组 顺序表有一片连续的存储区, 他可以存储任意类型的结构 结构定义: 1. size : 顺序表的大小(容量, 也可以说一共有几个格子) 2. length : 标记顺序表现在共有的元素个数 3. data_type : 确定顺序表中每个位置(格子)存储的元素类型 顺序表 - 插入: 想让数值7插放在数值为3的位置. 7 | v 1 2 ...

Aliezo的博客 510

问题解答:如何不通过修改底层数据库表的方式,给数据库对应的数据结构,增添新的字段?

现在需要将这张表里的内容读取到 ABAP 内表里,并且针对每个行项目,增加一个新的列字段,我随便举个例子,这个列字段名称叫 LENGTH,值为 OBJ_NAME 字段的长度,使用。最笨的办法就是下面这样定义一个新的类型,这个类型的每个字段名称,都来自数据库表 TADIR 的同名字段,在末尾再增添自定义字段 length.其实我们是做 ALV 输出,只需要 ABAP 内表变量的类型,包含 TADIR 数据库表的全部字段,再加上新的 LENGTH 字段即可。这相当于多了一个中间层,没办法直接被 ALV 处理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 481

大模型技术全景与核心概念解析:从基础原理到AI智能体架构(实时更新中)

本文系统解析了大模型技术的核心概念与架构。首先介绍了LLM(大语言模型)、LLMOps(模型运维)、AIGC(生成内容)、AGI(通用AI)等基础概念,重点阐述了大模型的工作原理,包括预处理、推理和后处理三个阶段。深入讲解了Token分词、FLOPs计算、Embedding向量表示等关键技术,并分析了LoRA微调、MoE架构等前沿方法。文章还探讨了AI智能体的发展前景,为理解大模型技术提供了全景视角。

算法工程师 1236

【数据结构】顺序表0基础知识讲解 + 实战演练

本文介绍了顺序表的概念、实现方法及常见算法题解。顺序表是基于数组实现的线性结构,分为静态和动态两种形式,其中动态顺序表支持扩容操作。文中详细讲解了顺序表的初始化、增删改查等基本操作实现,并通过头文件、源文件和测试文件展示了模块化编程思想。针对LeetCode经典题目,提供了多种解题思路,包括双指针法、合并排序等,分析了各类解法的时间/空间复杂度。最后指出了顺序表在插入删除和扩容方面的局限性,引出了链表数据结构作为优化方案。全文系统性地梳理了顺序表的核心知识点,为后续学习链表打下基础。

小年糕的博客 2347

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1371

C语言的数据结构顺序表基础知识总计

C语言的数据结构顺序表基础知识总计

c673929079的博客 405

【unity游戏开发入门到精通——UGUI】UI控件 —— Toggle开关切换控件

【unity游戏开发入门到精通——UGUI】UI控件 —— Toggle开关切换控件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1845

SPD-Conv+YOLOv8:空间深度转换卷积赋能小目标检测,从原理到实战的科研级优化指南

从理解SPD-Conv“空间到深度+逐步卷积”的核心设计,到亲手将其嵌入YOLOv8并验证在小目标场景的表现,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解“小目标特征保留”在检测任务中的核心价值。现在就开始行动,相信你会在小目标检测的“细节捕捉”之路上,走出一条属于自己的技术路径。实验通常会证明:嵌入SPD-Conv后,YOLOv8在小目标AP上提升5-8个百分点,mAP50-95提升3-5个百分点,而推理速度仅下降5%以内,充分体现了其“保细节+提精度”的优势。

m0_64661770的博客 163

数据结构复习之一和二(基础知识 + 顺序表)

1.1.2 数据结构的三要素数据的逻辑结构数据的存储结构数据的运算2.3 线性表的链式表示2.3.1 单链表2.3.2 单链表上基本操作的实现1 将元素插入到链表开头 (修改头指针和新插元素的next即可)2 将元素插入到链表结尾 (直接修改末尾节点的指向, 将新插元素的next=null).....2.3.6 顺序表和链表的比较...

一个幽灵 231

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构学习day1-----基础知识+顺序表

相互之间存在一种或多种特定关系的数据元素的集合。是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。是解决特定问题求解步骤的描述,计算机中表现为指令的有限序列,每条指令表示一个或多个操作。零个或多个数据元素的有限序列元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。

m0_62035519的博客 500

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据结构(1)---顺序表

数据的逻辑结构 线性结构:顺序表 链表 栈 队列 非线性结构: 树 图

cpu_moon的博客 311

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

顺序表的创建

1、数据结构的最简单的顺序表。 顺序表功能就是插入数据、删除数据、打印数据。 其他函数就是在这几个的基础上修改 第一步:插入数据 首先先创建一个顺序表并且初始化 顺序表就相当于是一个数组。 初始化好了之后就是插入数据了 然后删除数据 这应该是最简单的一步了。 打印数据 完整代码: //顺序表的基本实现 //定义一个结构体 typedef struct SLlist { int* a;//数组 int size;//个数 int capacity;...

李洙赫的博客 8595

【数据结构】顺序表与ArrayList

数据结构中的顺序表~

做梦都想要三十万年薪~ 2458

顺序表基础

2.需要的储备知识⽬录1.课前准备2.顺序表概念及结构3.顺序表分类4.实现动态顺序表正⽂开始课前预备1.课程⽬标C语⾔语法基础到数据结构与算法,前⾯已经掌握并具备了扎实的C语⾔基础,为什么要学习数据结构课程?⸺通讯录项⽬2.需要的储备知识简单了解,通讯录具备增加、删除、修改、查找联系⼈等操作。要想实现通讯录项⽬有两个技术关键:1)C语⾔语法基础2)数据结构 之 顺序表/链表3.数据结构相关概念1、什么是数据结构。

m0_67371175的博客 900

数据结构(学习)2024.8.6(顺序表)

数据结构(数据,逻辑结构,存储结构和操作),算法的相关定义和知识(算法的特性,判断标准),时间复杂度,空间复杂度,顺序表(特点,命名规则,相关操作)

何物爱惜雨的博客 1639

顺序表数据结构

1.线性表1.线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。2.顺序表。

ljw的博客 726

数据结构-顺序表

序:又要重新开始学习数据结构了,这次我一定要赢!哈哈哈哈,考研人加油!尽量争取把数据结构的代码都敲一遍。 线性表的概念:n个具有相同特性的数据元素的有限序列。 顺序表相对于数据结构的其他知识而言比较简单,可以单纯的看做数组,可以随意存取,时间复杂度为O(1)。(突然想到主定理也忘记了,我是fw) 看王道上的代码,只有插入删除和查找,这里也简单的实现这几种方法。(完整代码在最下边) 顺序表的插入:给定插入位置、和插入元素,将数据插入到指定位置。 时间复杂度分析: 最好的情况下,在最后的位置插入..

lzlyxxn的博客 536

数据结构#顺序表

目录 一、数据结构的定义 二、顺序表 三、结构操作 一、数据结构的定义 1、数据结构=结构定义+结构操作(定义某种数据并维护它) 二、顺序表: 顺序表:(第一重点) 1①1②③④⑤] (任意类型) 1、结构定义: ①有一片连续的存储区 ②、顺序表的总大小size=a(能存储的元素个数) ③、length=5(当前顺序表中一共存储了x几个元素) ④、date-type=xx(顺序表中储存)的每一个元素的数据类型 三、操作结构 2、结构操作 插入: void Insert (ElementTyp

weixin_73227242的博客 289
上一篇: 两个变量交换的几种方法
下一篇: 链表的基础知识
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值