当前位置: 首页 > news >正文

【数据结构初阶】实现顺序表的简单功能

目录

  • 一.线性表和顺序表的概念
    • 二.顺序表的实现
    • 1.动态顺序表的创建
    • 2.初始化顺序表
    • 3.打印顺序表
    • 4.销毁顺序表
    • 5.检查容量
    • 6.头插 尾插
    • 7.头删 尾删
      • 三.使用下标插入删除
        • 1.删除指定位置
        • 2.向指定位置插入指定数

一.线性表和顺序表的概念

  • 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
    线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
  • 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

二.顺序表的实现

1.动态顺序表的创建

我们先行定义一个初始容量INT_TIAL为 4.

typedef int SLDataList;
#define INT_TIAL 4
typedef struct SeqList
{SLDataList* a;int size;//现存个数int capacity;//容量
}SL;

2.初始化顺序表

先对顺序表进行功能实现前,我们需要先将初始值赋好。

void SeqInit(SL* pr)
{assert(pr);SLDataList* tmp = (SLDataList*)malloc(sizeof(SLDataList) * INT_TIAL);if (tmp == NULL){perror("malloc tmp is\n");return;}else{pr->a = tmp;}pr->size = 0;pr->capacity = INT_TIAL;
}

3.打印顺序表

void SeqPrin(SL* pr)
{assert(pr);for (int i = 0; i < pr->size; i++)printf("%d ", pr->a[i]);printf("\n");
}

4.销毁顺序表

void DisSeq(SL* pr)
{assert(pr);free(pr->a);pr->a = NULL;pr->size = 0;pr->capacity = 0;
}

5.检查容量

对顺序表所有的插入操作前都应该就检查顺序表的容量是否充足,所以应该编写检查容量函数对顺序表进行扩容。


void SeqCheckCapacity(SL* pr)
{assert(pr);if (pr->size == pr->capacity){SLDataList* tmp = (SLDataList*)realloc(pr->a, pr->capacity * sizeof(SLDataList) * 2);if (tmp == NULL){perror("realloc is\n");return;}pr->a = tmp;pr->capacity *= 2;}
}

6.头插 尾插

尾插比较简单,但是进行头插时需要进行类似memmove的操作,进行内存覆盖。


void PushBack(SL* pr)
{assert(pr);if (pr->size+1 > pr->capacity)SeqCheckCapacity(pr);else{int input;printf("输入要插入的数:>");scanf("%d", &input);pr->a[pr->size] = input;pr->size++;}
}void PushFront(SL* pr)
{assert(pr);if (pr->size+1 > pr->capacity)SeqCheckCapacity(pr);else{int input;printf("输入要插入的数:>");scanf("%d", &input);int end = pr->size-1;while (end >= 0){pr->a[end+1] = pr->a[end];end--;}pr->a[0] = input;pr->size++;}}

7.头删 尾删

void PopBack(SL* pr)
{assert(pr);assert(pr->size > 0);pr->size--;
}void PopFront(SL* pr)
{assert(pr);if (pr->size < 1)return;else{int i = 0;while (i < pr->size - 1){pr->a[i] = pr->a[i + 1];i++;}pr->size--;}
}

三.使用下标插入删除

1.删除指定位置


void SeqDel(SL* pr, int pos)
{assert(pr);assert(pos >= 0 && pos < pr->size);int end = pos + 1;while (end < pr->size){pr->a[end - 1] = pr->a[end];end++;}pr->size--;
}

2.向指定位置插入指定数


void SeaSert(SL* pr, int pos, int x)
{assert(pr);assert(pos >= 0 && pos < pr->size);if(pr->size+1>pr->capacity)SeqCheckCapacity(pr);else{int end = pr->size;while (end > pos){pr->a[end] = pr->a[end - 1];end--;}pr->a[pos] = x;pr->size++;}}

最后我们就实现了一个简单的顺序表功能,但是顺序表的缺点也非常明显:

  1. 中间头部插入删除数据,需要挪动数据,效率低下
  2. 空间不够,扩容。扩容有一定的消耗,其次还可能会有一定空间浪费

在接下来的链表的学习后,我们将会解决这个问题。

相关文章:

【数据结构初阶】实现顺序表的简单功能

目录一.线性表和顺序表的概念二.顺序表的实现1.动态顺序表的创建2.初始化顺序表3.打印顺序表4.销毁顺序表5.检查容量6.头插 尾插7.头删 尾删三.使用下标插入删除1.删除指定位置2.向指定位置插入指定数一.线性表和顺序表的概念 线性表是n个具有相同特性的数据元素的有限序列。 线…...

华为OD机试题,用 Java 解【停车场车辆统计】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

Linux中使用Docker部署Mysql数据库

前言 和朋友一起搞一个项目&#xff0c;分了一下工作&#xff0c;但是mysql迟迟安装不上&#xff0c;程序都在一个环境里确实容易出现很多问题&#xff0c;浪费时间和经历在这些配置上&#xff0c;好在有docker了&#xff0c;就在docker里搭建一个Mysql数据库使用吧&#xff0…...

JPDA(远程调试)使用步骤

JPDA(Java Plateform Debugger Architecture) 更改启动脚本 vi catalina.sh 127行 CATALINA_OPTS “-Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address5888” 指定端口&#xff0c;默认是8000 377行以jpda方式启动tomcat ./catalina.sh jpda start tomcat以这个…...

磷脂-聚乙二醇-丙烯酸酯;DSPE-PEG-AC试剂说明;DSPE-PEG-Acrylate科研用

中文名称&#xff1a;磷脂-聚乙二醇-丙烯酸酯 丙烯酸酯-聚乙二醇-磷脂 简称&#xff1a;DSPE-PEG-AC&#xff1b;DSPE-PEG-Acrylate 溶剂&#xff1a;溶于部分常规有机溶剂 PEG分子量:1000&#xff1b;2000&#xff1b;3400&#xff1b;5000等等 注意事项&#xff1a;避免…...

C++入门:异常处理

异常是程序在执行期间产生的问题。C 异常是指在程序运行时发生的特殊情况&#xff0c;比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C 异常处理涉及到三个关键字&#xff1a;try、catch、throw。throw: 当问题出现时&#xff0c;程序会抛出一个异常。这是通过使…...

C/C++每日一练(20230225)

目录 1. 工龄问题求解 ★ 2. 字符图形输出 ★★ 3. LRU 缓存机制 ★★★ 1. 工龄问题求解 给定公司N名员工的工龄&#xff0c;要求按工龄增序输出每个工龄段有多少员工。输入首先给出正整数N&#xff0c;即员工总人数&#xff1b; 随后给出N个整数&#xff0c;即每个员工…...

nyist最终淘汰赛第一场

我出的题喜欢吗 我要水题解所以每一篇题解都分一个博客 A 题解链接: Atcoder abc257 E_霾まる的博客-CSDN博客 构造贪心题 在本次淘汰赛中较难 B 题解链接: atcoder abc217 D_霾まる的博客-CSDN博客 STL二分题, 当然你可以数组二分, 相对麻烦一点 在本次淘汰赛中较简单…...

《零成本实现Web自动化测试--基于Selenium》 Selenium-RC

一. 简介 Selenium-RC可以适应更复杂的自动化测试需求&#xff0c;而不仅仅是简单的浏览器操作和线性执行。Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例&#xff0c;例如读写文件、查询数据库和E-mail邮寄测试报告。 当测试案例遇到selenium-IDE不支持的逻辑…...

来阿里我的收获是什么?(未完待续)

不知不觉来阿里两年多了&#xff0c;每天都过的很充实&#xff0c;感觉这段时间没有学到什么东西&#xff0c;但是又觉得收获满满&#xff0c;恰好又好久没有动笔写过些什么了&#xff0c;所以有了这个动笔念头。 之前技术方面记录的比较多&#xff0c;这次就记录一些比较磨心的…...

golang net/http库的学习

net/http 是 Golang 标准库中用来构建 HTTP 服务器和客户端的包&#xff0c;它提供了很多功能强大的方法和接口&#xff0c;可以让您方便地构建和处理 HTTP 请求和响应。下面是一些学习 net/http 的建议&#xff1a; 了解 HTTP 协议。在学习 net/http 之前&#xff0c;建议先了…...

Spring(AOP)

目录 1. 预备知识-动态代理 1.1 什么是动态代理1.2 动态代理的优势1.3 基于JDK动态代理实现2. AOP 2.1 基本概念2.2 AOP带来的好处3. Spring AOP 3.1 前置通知3.2 后置通知3.3 环绕通知3.4 异常通知3.5 适配器 1. 预备知识-动态代理 1.1 什么是动态代理 动态代理利用Java的反…...

服务搭建篇(六) Kafka + Zookeeper集群搭建

一.Zookeeper 1.什么是Zookeeper ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要 用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂且容 易出错的分布式一致性服务封装起来&#xff0c;构成一个…...

Go基础-可变参数函数

文章目录1 定义2 语法3 给可变函数参数传入切片4 修改可变参数函数中的切片1 定义 可变参数函数是一种参数个数可变的函数。 2 语法 语法 //关键字 函数名(参数1&#xff0c; elems为T类型的可变参数) 返回值类型 func name(params type, elems ...T) returntype{// 函数体 }…...

kali环境搭建

一、渗透为什么要使用kali&#xff1f; 1、系统开源 kali linux实际上是开源的操作系统&#xff0c;其中内置了几百种工具而且是免费的&#xff0c;可以非常方便的为测试提供上手即用的整套工具&#xff0c;而不需要繁琐的搭建环境&#xff0c;及收集工具下载安装等步骤 2、系统…...

电子技术——输出阶类型

电子技术——输出阶类型 输出阶作为放大器的最后一阶&#xff0c;其必须有较低的阻抗来保证较小的增益损失。作为放大器的最后一阶&#xff0c;输出阶需要处理大信号类型&#xff0c;因此小信号估计模型不适用于输出阶。尽管如此&#xff0c;输出阶的线性也非常重要。实际上&a…...

C++设计模式(21)——中介者模式

亦称&#xff1a; 调解人、控制器、Intermediary、Controller、Mediator 意图 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建…...

Gin获取Response Body引发的OOM

有轮子尽量用轮子 &#x1f62d; &#x1f62d; &#x1f62d; &#x1f62d; &#x1f62d; &#x1f62d; 我们在开发中基于Gin开发了一个Api网关&#xff0c;但上线后发现内存会在短时间内暴涨&#xff0c;然后被OOM kill掉。具体内存走势如下图&#xff1a; 放大其中一次 在…...

不同方案特性对比

特性对比项 2.4G 蓝牙 868M WIFI 通信速率 低 低 低 高 距离&#xff08;实用可靠&#xff09; 20米 10米 30米 15米 确定性 高 低 高 高 可靠性&#xff08;距离内&#xff09; 高 低 高 高 刷新一个标签时间&#xff08;通常&#xff09; 0.5-1s …...

线性数据结构:链表 LinkList

一、前言 链表的历史 于1955-1956年&#xff0c;由兰德公司的Allen Newell、Cliff Shaw和Herbert A. Simon开发了链表&#xff0c;作为他们的信息处理语言的主要数据结构。链表的另一个早期出现是由 Hans Peter Luhn 在 1953 年 1 月编写的IBM内部备忘录建议在链式哈希表中使…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...