数据结构2—顺序表(附源码)

1.线性表

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

线性表在逻辑上是线性结构,也就是说连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2.顺序表

2.1 概念与结构

概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。其底层逻辑其实就是数组,只不过多了增删改查的功能。

2.2 分类

2.2.1 静态顺序表

typedef int SLDataType;
#define N 7typedef struct SeqList
{SLDataType arr[N];int size;//顺序表中有效数据的个数
}SL;

可能不够用或者浪费空间

2.2.2 动态顺序表

struct SeqList
{int* arr;int capacity;//顺序表空间大小int size;//有效数据个数
}

3.演示

//SeqList.h
#pragma once//定义动态顺序表结构
typedef int SLDataType;typedef struct SeqList
{SLDataType* arr;int capacity;//顺序表空间大小int size;//记录顺序表的有效数据个数
}SL;//初始化
void SLInit(SL* ps);//销毁
void SLDestroy(SL* ps);//插入数据
void SLPushBack(SL* ps, SLDataType x);
void SLPushFront(SL* ps, SLDataType x);//打印数据
void SLPrint(SL* ps);//检查容量
void SLCheckCapacity(SL* ps);//删除数据
void SLPopBack(SL* ps);
void SLPopFront(SL* ps);
//SeqList.c
#include "SeqList.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>void SLCheckCapacity(SL* ps)
{//判断空间是否充足if (ps->size == ps->capacity){//增容//连续空间足够,直接扩容//连续空间不够,重新找一块地址,拷贝,销毁旧地址//若capacity为0,给个默认值;如果有值,那就*2int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLDataType* tmp = (SLDataType*)realloc(ps->arr, newCapacity * sizeof(SLDataType));if (tmp == NULL){perror("realloc fail!");exit(1);}ps->arr = tmp;ps->capacity = newCapacity;}
}void SLInit(SL* ps)
{ps->arr = NULL;ps->size = ps->capacity = 0;
}void SLDestroy(SL* ps)
{if (ps->arr){free(ps->arr);}ps->arr = NULL;ps->capacity = ps->size = 0;
}void SLPushBack(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);ps->arr[ps->size++] = x;
}void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);//数据整体后移一位for (int i = ps->size; i > 0; i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[0] = x;ps->size++;
}void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->arr[i]);}printf("\n");
}void SLPopBack(SL* ps)
{assert(ps);assert(ps->size);ps->arr[ps->size - 1] = 0;ps->size--;
}void SLPopFront(SL* ps)
{assert(ps);assert(ps->size);//数据整体向前挪动一位for (int i = 0; i < ps->size; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}
//test.c
#include "SeqList.h"void SLtest01()
{SL s;SLInit(&s);//SLPushBack(&s, 1);//SLPushBack(&s, 2);//SLPushBack(&s, 3);//SLPushBack(&s, 4);//1 2 3 4//SLPushBack(&s, 5);//SLPushBack(&s, 6);//SLPushBack(&s, 7);SLPushFront(&s, 1);SLPushFront(&s, 2);SLPushFront(&s, 3);SLPopBack(&s);SLPopFront(&s);//6 5 4 3 2 1SLPrint(&s);SLDestroy(&s);
}int main()
{SLtest01();return 0;
}

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

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

相关文章

抽象java入门1.5.2

前言&#xff1a; 坑留下来是为了补的 正片&#xff1a; 一、面向对象特性 二、面向对象编程详细展开 这些没有加粗的方法究竟来源哪&#xff1f; 在上一期的提示中&#xff0c;我们说了这些方法来源于面向对象编程的一个特性 验证&#xff1a; 第一步&#xff1a;我们先…

区块链空投之空投合约

关于 solidity、空投、智能合约 空投作为区块链行业最大的惊喜之一,很多人都是通过空投才接触到了这一领域。 甚至有很多专业薅空投羊毛的专业玩家。行业内有句话,小薅养活妻儿、大薅… 文章目录 前言空投到底是什么空投什么?空投合约代码空投步骤代码解析代码详解前言 今…

代码随想录算法训练营第23天|39. 组合总和、40.组合总和II、131.分割回文串

打卡Day23 1.39. 组合总和2.40.组合总和II3.131.分割回文串 1.39. 组合总和 题目链接&#xff1a;39. 组合总和 文档讲解&#xff1a; 代码随想录 这道题和昨天做的组合之和由两个区别&#xff1a;被选的元素没有数量限制&#xff0c;同时被选的元素可以无限重复&#xff0c;…

【嵌入式开发之标准I/O】流的刷新、定位以及格式化输出、输入

流的刷新 int fflush(FILE *fp); 成功时返回0&#xff1b;出错时返回EOF。 将流缓冲区中的数据写入实际的文件。 Linux下只能刷新输出缓冲区,输入缓冲区丢弃。 如果输出到屏幕使用fflush(stdout)。 流的定位 流的定位&#xff1a;ftell()函数 long ftell(FILE *stream)…

JavaScript:节流与防抖

目录 一、前言 二、节流&#xff08;Throttle&#xff09; 1、定义 2、使用场景 3、实现原理 4、代码示例 5、封装节流函数 三、防抖&#xff08;Debounce&#xff09; 1、定义 2、使用场景 3、实现原理 4、代码示例 5、封装防抖函数 四、异同点总结 一、前言 …

信息检索(39):Condenser: a Pre-training Architecture for Dense Retrieval

Condenser: a Pre-training Architecture for Dense Retrieval 摘要1 引言2 相关工作3 方法3.1 前提3.2 Transformer 编码器的问题3.3 Condenser3.4 Transformer 编码器的 Condenser 4 实验4.1 预训练4.2 句子相似度4.3 开放域问答检索4.4 Web search 检索 5 注意力分析6 结论 …

Adobe Premiere Pro(Pr)安装包软件下载

一、简介 Adobe Premiere Pro&#xff08;简称Pr&#xff09;是由Adobe公司开发的一款功能强大的视频编辑软件。它支持多平台使用&#xff0c;包括Windows和Mac系统&#xff0c;并且拥有良好的兼容性和高效的性能。Premiere Pro不仅提供了视频剪辑、特效添加、音频处理等基本功…

《从C/C++到Java入门指南》- 9.字符和字符串

字符和字符串 字符类型 Java 中一个字符保存一个Unicode字符&#xff0c;所以一个中文和一个英文字母都占用两个字节。 // 计算1 .. 100 public class Hello {public static void main(String[] args) {char a A;char b 中;System.out.println(a);System.out.println(b)…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 二进制游戏(200分)- 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

npm install时报错 reason: connect ETIMEDOUT

在VS code中导入新项目&#xff0c;执行npm install时报错&#xff1a; npm warn old lockfile Could not fetch metadata for antv/coord0.1.0 FetchError: request to https://registry.npmjs.org/antv%2fcoord failed, reason: connect ETIMEDOUT 150.242.56.251:443 npm w…

大数据之路 读书笔记 Day8 数据存储

回顾&#xff1a; 大数据之路 读书笔记 Day7 实时技术 简介及流式技术架构 大数据之路 读书笔记 Day6 离线数据开发之数据开发平台 数据存储 1 数据类型 实时任务在运行过程中&#xff0c;会计算很多维度和指标&#xff0c;这些数据需要放在一个存储系统中作为恢复或者关联使…

微信小程序开发:DOM 相关 API 使用详解

在微信小程序开发中&#xff0c;与传统的网页开发相比&#xff0c;由于安全性和性能考虑&#xff0c;访问 DOM&#xff08;文档对象模型&#xff09;是受限的。然而&#xff0c;微信小程序提供了一些特定的 API&#xff0c;使开发者能够处理和操作视图层&#xff0c;实现丰富的…

Transformer之Vision Transformer结构解读

论文地址 代码地址 写在前面 什么是Transformer呢&#xff1f;就是把符号向量化为Token&#xff0c; 再和位置编码求和或者做阿达玛积&#xff0c;最后送入一定层数的Attention Block构成的Encoder和Decoder&#xff0c;就完成了Transformer的基础功能。 那么&#xff0c;把上…

C基础函数——内存分配(未完)

在C语言中&#xff0c;内存管理是非常重要的一部分。C语言提供了几种不同的函数用于动态内存分配和释放&#xff0c;这些函数允许程序在运行时根据需要分配和回收内存。以下是C语言中常用的几个内存管理函数&#xff1a; malloc() void malloc(size_t size); 这个函数用于请求…

C++中枚举(enum)的用法和限制

在C中&#xff0c;枚举&#xff08;enum&#xff09;是一种用户定义的类型&#xff0c;它允许程序员为整数常量指定易于阅读的名字。枚举类型是由一组命名的整型常量组成的类型&#xff0c;每个常量都表示该类型的一个有效值。枚举在编程中常用于表示一组固定的值&#xff0c;如…

MySQL:mysql的数据类型

MySQL 作为一个流行的关系型数据库管理系统&#xff0c;支持多种数据类型以满足不同的数据处理和存储需求。正确理解和使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。 MySQL 数据类型 数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。…

idea2019版本创建JavaWeb项目并配置Tomcat步骤

一、创建JavaWeb项目 1.新建项目File->New->Project 2. 选择JavaWeb应用在New Project窗口中选择Java后勾选Java EE中的Web Application后点击next即可 3.设置项目名称后点击finish即可 4.至此项目创建完成&#xff0c;检查文件是否齐全&#xff0c;开始配置Tomcat 二、…

IDEA工具中Java语言写小工具遇到的问题

一&#xff1a;读取excel时遇到 org/apache/poi/ss/usermodel/WorkbookProvider 解决办法&#xff1a; 在pom.xml中把poi的引文包放在最前面即可&#xff08;目前就算放在最后面也不报错了&#xff0c;不知道为啥&#xff09; 二&#xff1a;本地maven打包时&#xff0c;没有…

base SAS programing学习笔记(read raw files2)

使用COLUMN input和FORMATTED input读入固定位置的外部文件&#xff1b;如下图所示&#xff0c; 1.COLUMN input &#xff08;按列数读入外部文件数据&#xff09; 使用column input 不需要按从左到右的顺序读取外部文件的数值&#xff0c;可以是任意读取&#xff0c;也可以重…

LeeCode Practice Journal | Day18_Binary Tree06

530.二叉搜索树的最小绝对差 题目&#xff1a;530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a;代码随想录 (programmercarl.com) 验证搜索树的进阶&#xff0c;二叉树中的双指针&#xff0c;思考过程中发现容易弄混递归向下传播和向上回…