C++数据结构——顺序表

C++数据结构——顺序表

以下代码可以作为一个顺序表的模板,从顺序表的初始化创建到增删改查,都有详细的过程,供学习参考。

#include<iostream>
#include<stdio.h>

using namespace std;

#define elemType int

struct SequentialList
{
    elemType *elements; 
    int size;
    int capacity;
};

//初始化
void initializeList(SequentialList *list,int capacity)
{
    list->elements = new elemType[capacity];
    list->size = 0;
    list->capacity = capacity;
}
//销毁
void destroyList(SequentialList *list)
{
    delete[] list->elements;
    
}
//当前大小
int size(SequentialList *list)
{
    return list->size;
}

//判断是否为空
bool isEmpty(SequentialList *list)
{
    return list->size == 0;
}

//顺序表插入
void insert(SequentialList *list,int index,elemType elements)
{
    if(index < 0 || index > list->size){
        throw std::invalid_argument("Invalid index");
    }
    //扩容
    if(list->size == list->capacity){
        int newCapacity = list->capacity * 2;
        elemType *newElements = new elemType[newCapacity];

        for(int i = 0; i < list->size; ++i){
          newElements[i] = list->elements[i];
        }
        delete[] list->elements;
        list->elements = newElements;  //指向新的内存空间
        list->capacity = newCapacity;
    }
    //从后往前遍历
    for(int i = list->size; i > index; --i){
        list->elements[i] = list->elements[i-1];
    }
    list->elements[index] = elements;
    list->size ++;

}

//删除元素
void deleteElement(SequentialList *list,int index)
{
    if(index < 0 || index >= list->size){
        throw std::invalid_argument("Invalid index");
    }
    //从前往后遍历
    for(int i = index; i < list->size - 1; ++i){
        list->elements[i] = list->elements[i+1];
    }
    list->size --;
}
//找到指定元素
int findElement(SequentialList *list,elemType element)
{
    for(int i = 0; i < list->size; ++i){
        if(list->elements[i] == element){
            return i;
        }
    }   
    return -1;
    
}

//获取元素
elemType getElement(SequentialList *list,int index)
{
    if(index < 0 || index >= list->size){
        throw std::invalid_argument("Invalid index");
    }
    return list->elements[index];
    
}

//修改元素
void upDateElement(SequentialList *list,int index,elemType value)
{
    if(index < 0 || index >= list->size){
        throw std::invalid_argument("Invalid index");
    }
    list->elements[index] = value;

}

int main()
{
    SequentialList myList;

    initializeList(&myList,10);

    for(int i = 0; i < 10; ++i){
        insert(&myList, i, i*10);
       
    }

    std::cout << "Size:" << size(&myList) << std::endl;
    std::cout << "is empty:" << isEmpty(&myList) << std::endl;

    std::cout << "顺序表元素:" ;
    for(int i = 0;i < size(&myList); ++i){
       std::cout << getElement(&myList,i) << " ";
    }
    cout << endl;

    std::cout <<  "删除第五个后:" ;
    deleteElement(&myList,5);
    for(int i = 0;i < size(&myList); ++i){
       std::cout <<  getElement(&myList,i) << " ";
    }
    cout << endl;

    std::cout <<  "修改第一个后:" ;
    upDateElement(&myList,1,1122);
    for(int i = 0;i < size(&myList); ++i){
       std::cout << getElement(&myList,i) << " ";
    }
    cout << endl;

    std::cout <<  "找到元素并修改:" ;
    int idx = findElement(&myList,20);
    upDateElement(&myList,idx,520);
    for(int i = 0;i < size(&myList); ++i){
       std::cout << getElement(&myList,i) << " ";
    }
    cout << endl;

    std::cout <<"从最后插入元素: ";
    insert(&myList,9,100);
    for(int i = 0;i < size(&myList); ++i){
       std::cout << getElement(&myList,i) << " ";
    }
    cout << endl;

    std::cout <<"获取第五个元素: ";
    std::cout << getElement(&myList,5) << std::endl;

    destroyList(&myList);

    return 0;
}

运行结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现小程序滑动删除组件+全选批量删除组件

如何实现小程序滑动删除组件全选批量删除组件 一、简介 如何实现小程序滑动删除组件全选批量删除组件 采用 uni-app 实现&#xff0c;可以适用微信小程序、其他各种小程序以及 APP、Web等多个平台 具体实现步骤如下&#xff1a; 下载开发者工具 HbuilderX进入 【Dcloud 插…

项目管理与经济决策(项目管理概论)

1项目的涵义 临时性、一次性的活动&#xff0c;人们称之为“项目”连续不断、周而复始的活动&#xff0c;人们称之为“运 作&#xff08;Operations&#xff09;”或“流程&#xff08;Processes&#xff09;” 项目是为创造独特的产品、服务或成果而进行 的 临 时 性 工 作 …

Data-efficient Fine-tuning for LLM-based Recommendation

目录 Introduction 利用大型语言模型&#xff08;LLM&#xff09;进行推荐最近引起了相当大的关注&#xff0c;其中微调在 LLM 的适应中发挥着关键作用。然而&#xff0c;在快速扩展的推荐数据上微调LLMs的成本限制了其实际应用。为了应对这一挑战&#xff0c;小样本微调提供了…

4.4java学习总结

包装类 java给出了一组包装类可以将基本数据类型包装成对象&#xff0c;分别为Byte、Short、Integer、Long、Float、Double、Character、Boolean&#xff0c;对应不同的基本数据类型。 基本数据类型 包装类 int Integer char long Character Long float Float double …

设计模式——抽象工厂模式02

如果是工厂模式是对同一类商品进行抽象然后生产。 那么抽象工厂模式是对工厂的抽象&#xff0c;每个工厂都能生产多种产品&#xff0c;不同工厂生产的商品性质相同&#xff0c;但外观&#xff0c;品牌会略有差异。 设计模式&#xff0c;一定要敲代码理解 商品抽象 public in…

Mysql安装(命令方式安装)

下载mysql压缩包 Mysql可以使用界面安装&#xff0c;也可以使用命令的方式安装&#xff0c;今天我们使用命令的方式安装mysql。首先下载mysql压缩包&#xff08;下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/&#xff09;&#xff0c;解压到你想要安装的目录。 …

hbuilderX创建的uniapp项目转移到vscode

场景&#xff1a;一直使用hbuilderX开发的朋友想转移到vscode获取更好的TypeScript支持&#xff0c;所以想把整个项目目录拖到vscode进行开发&#xff0c;但发现运行不了&#xff0c;提示没有package.json等&#xff0c;并且不能执行pnpm命令 首先&#xff0c;我们先来看一下h…

vivado 配置存储器器件编程2

为双 QSPI (x8) 器件创建配置存储器文件 您可使用 write_cfgmem Tcl 命令来为双 QSPI (x8) 器件生成 .mcs 镜像。此命令会将配置数据自动拆分为 2 个独立 的 .mcs 文件。 注释 &#xff1a; 为 SPIx8 生成 .mcs 时指定的大小即为这 2 个四通道闪存器件的总大小。…

专有钉钉微应用埋点以及本地调试埋点总结

最近在对接浙政钉&#xff0c;稳定性监控、通用采集 SDK、基础埋点、基础埋点&#xff0c;每次发布上去&#xff0c;工作人员那边反馈抓取不到信息 稳定性监控代码、通用采集 SDK index.html <!-- 流量稳定监控 S 关于埋点上线打开--><script src"https://wpk-…

动规训练3

一、按摩师 1、题目解析 简而言之就是&#xff0c;找到一个按摩师的预约总是长的最长方案&#xff0c;还有一个限制条件&#xff0c;选取的预约两两不相邻。 2、算法原理 a状态表示方程 小技巧&#xff1a;经验题目要求 dp[i]表示以这个节点为结尾&#xff0c;最长的预约时…

鸿蒙开发第一课-工具与HelloWorld

武汉数字人才实训基地 一、初始HarmonyOS以及DevEco Studio 2023年8月4日&#xff0c;HarmonyOS 4.0操作系统正式发布。华为鸿蒙Next&#xff08;HarmonyOS Next&#xff09;操作系统开发者预览版(Developer Preview)发布。超过7亿台设备搭载了HarmonyOS 系统 2024年&#xf…

tigramite教程(七)使用TIGRAMITE 进行条件独立性测试

文章目录 概述1 连续数值变量1.1 ParCorr 偏相关&#xff08;ParCorr类&#xff09;1.2 鲁棒偏相关&#xff08;RobustParCorr&#xff09;非线性检验1.3 GPDC1.4 CMIknn 2a. 分类/符号时间序列2b. 混合分类/连续时间序列多变量X和Y的测试 概述 这个表格概述了 X ⊥ Y ∣ Z X\…

挑选人力资源管理系统,专家推荐的6款必看!

在当今数字化时代&#xff0c;人力资源管理系统已成为企业高效运营和持续发展的重要工具。本文为您介绍的6款好用的人力资源管理系统有Zoho People、金蝶人力云、Workday、北森eHR、用友人力云、易路&#xff0c;帮助您找到最适合自己企业的解决方案。 一、Zoho People Zoho P…

汽车网络安全管理

汽车网络安全管理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c…

《C++程序设计》阅读笔记【3-数组】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学&#xff0c;回复C程序设计获取下载链接。 1 数组1.1 概述1.2 数组初始化1.2.1 概述1.2.2 字符数组的初始化1.2.…

流行的API架构学习

几种流行的API架构风格图 SOAP&#xff08;Simple Object Access Protocol&#xff09; 优点&#xff1a;SOAP 是一种基于 XML 的通信协议&#xff0c;具有良好的跨平台和跨语言支持。它提供了丰富的安全性和事务管理功能&#xff0c;并支持复杂的消息交换模式。 缺点&#xf…

buu刷题(2)

[护网杯 2018]easy_tornado web buuctf [护网杯 2018]easy_tornado1_[护网杯 2018]easy_tornado 1-CSDN博客 render是渲染HTML页面用到的函数 这应该是一个模板注入漏洞 访问/fllllllllllllag&#xff0c;自动跳到了这个页面&#xff0c;可以看到 url 上有个msgError, 尝试将…

力扣 904.水果成篮

题目&#xff1a; 题目理解&#xff1a;fruits里的每个数字表示一种类型水果&#xff0c;相同数字表示同种类型水果。 class Solution {public int totalFruit(int[] fruits) {// 用HashMap来表示篮子&#xff0c;key表示水果类型&#xff0c;value表示多少颗树Map<Intege…

工厂车间系统|基于springboot的工厂车间管理系统设计与实现(附项目源码+论文)

基于springboot工厂车间管理的设计与实现 一、摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱…

R语言数据操纵:如何构建子集

目录 向量的子集 矩阵的子集 数据框的子集 列表的子集 如何处理缺失值 向量化操作 构建子集的基本方法&#xff1a; 1.使用[]提取一个或多个类型相同的元素 2.使用[[]]从列表或者数据框中提取元素 3.使用$按名字从列表或数据框中提取元素 向量的子集 比如有一个向量…