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

news2024/11/19 16:45:23

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;
}

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

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

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

相关文章

关联规则(理论及实例)

目录 一、啤酒和尿布的故事 二、理论 三、实例 1. 自定义数据集 2. 数据需转换成one-hot编码 3.电影题材关联分析 一、啤酒和尿布的故事 在美国&#xff0c;一些年轻的父亲下班后经常要到超市去购买婴儿尿布&#xff0c;超市因此发现一个规律&#xff0c;在购买婴儿尿布的…

scala实现通过Spark统计人均登录次数最终写入MySQL

谨以此博客作为记录 小编这里用的版本是&#xff1a; <hadoop.version>2.7.7</hadoop.version> <spark.version>2.4.5</spark.version> <scala.version>2.12.10</scala.version> 如果没用到Hadoop可以忽略 步骤 准备数据&#xff0c;知道…

信息系统项目管理师——第18章项目绩效域管理(二)

项目工作绩效域 预期目标 高效且有数的项目绩效 2.适合项目和环境的项目过程 3.干系人适当的沟通和参与 4.对实物资源进行了有效管理 5.对采购进行了有效管理 6.有效处理了变更 7.通过持续学习和过程改进提高了团队能力 绩效要点 1.项目过程 2.项目制约因素 3.专注于工作过…

[调度算法]

目录 一. 先到先服务(FCFS)二. 短作业优先(SJF)三. 高响应比优先(HRRN)四. 时间片轮转调度算法(RR)五. 优先级调度算法六. 多级反馈队列调度算法七. 多级队列调度算法 \quad 一. 先到先服务(FCFS) \quad 比如你要买一杯奶茶, 在你前面的要买20杯奶茶, 那么你就要等很久 \quad …

pwn学习笔记(7)--堆相关源码

相关源码&#xff1a; 1. chunk 相关源码&#xff1a; ​ 对于用户来说&#xff0c;只需要确保malloc()函数返回的内存不会发生溢出&#xff0c;并且在不用的时候使用free() 函数将其释放&#xff0c;以后也不再做任何操作即可。而对于glibc来说’它要在用户第一次调用malloc…

【QT+QGIS跨平台编译】056:【pdal-dimbuilder+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal介绍二、dimbuilder介绍三、pdal下载四、文件分析五、pro文件六、编译实践七、生成Dimension.hpp八、生成pdal_features.hpp一、pdal介绍 PDAL(Point Data Abstraction Library)是一个开源库,用于处理点云数据的获取、过滤、转换、分析和…

【opencv】示例 3calibration.cpp 利用OpenCV库进行三路相机校准

此代码是一个利用OpenCV库进行三路相机校准的C程序。这个示例程序主要用于校准水平摆放的三台相机。 以下是关键函数及其功能的简要总结&#xff1a; help(char** argv): 显示程序的使用方法。calcChessboardCorners(Size boardSize, float squareSize, vector<Point3f>&…

设计模式 --5观察者模式

观察者模式 观察者模式的优缺点 优点 当一个对象改变的时候 需要同时改变其他对象的相关动作的时候 &#xff0c;而且它不知道有多少具体的对象需要改变 应该考虑使用观察者模式 。观察者模式的工作就是解除耦合 让耦合双方都依赖与抽象 而不是具体 是的各自改变都不会影响另…

07-app端文章搜索

app端文章搜索 1) 今日内容介绍 1.1)App端搜索-效果图 1.2)今日内容 文章搜索 ElasticSearch环境搭建 索引库创建 文章搜索多条件复合查询 索引数据同步 搜索历史记录 Mongodb环境搭建 异步保存搜索历史 查看搜索历史列表 删除搜索历史 联想词查询 联想词的来源 联…

51单片机使用uart串口和助手简单调试

基础知识 参考 特殊功能寄存器PCON&#xff08;控制波特率是否加倍SMOD&#xff09;、TMOD&#xff08;T0,T1计时器的功能方式&#xff09;、TCON&#xff08;T0,T1计时器的控制&#xff09;、串口中断、SCON&#xff08;串口数据控制寄存器&#xff09; 关闭定时器1中断&…

Cisco交换机安全配置

Cisco交换机安全配置 前提 我们以下命令一般都要先进入Config模式 S1> enable S1# conf t S1(config)#端口安全保护 禁用未使用的端口 以关闭fa0/1到fa0/24的端口为例 S1(config)# interface range fa0/1-24 S1(config-if-range)# shutdown缓解MAC地址表攻击 防止CAM…

快递费用一目了然:taobao.item_fee API在电商中的应用

taobao.item_fee API在电商中的应用主要体现在精准计算快递费用&#xff0c;从而为用户提供一个更加透明和便捷的购物体验。这一接口允许淘宝或天猫的开发者根据商品ID、收货地址等信息&#xff0c;精确计算商品的快递费用。对于用户而言&#xff0c;这意味着在购物过程中能够实…

【考研数学】如何做题,做什么题,才能打好基础?

还是建议做经验贴推荐的练习册去巩固基础&#xff01;毕竟目的是考研&#xff0c;考研习题册出的题目更加有针对性&#xff0c;如果拿课后习题练手的话还是差一些强度的&#xff01; 看到网上说1800适合零基础&#xff0c;兴致勃勃下单&#xff0c;买回来发现自己练零基础的题…

学习 Git 基础知识 - 日常开发任务手册

欢迎来到我关于 Git 的综合指南&#xff0c;Git 是一种分布式版本控制系统&#xff0c;已经在软件开发中彻底改变了协作和代码管理方式。 无论你是经验丰富的开发者还是刚开始编程之旅的新手&#xff0c;理解 Git 对于正确掌控代码、高效管理项目和与他人合作至关重要。 在本…

mysql故障排查

MySQL是目前企业最常见的数据库之一日常维护管理的过程中&#xff0c;会遇到很多故障汇总了常见的故障&#xff0c;MySQL默认配置无法满足高性能要求 一 MySQL逻辑架构图 客户端和连接服务核心服务功能存储擎层数据存储层 二 MySQL单实例常见故障 故障1 ERROR 2002 (HY000)…

Docker Desktop 不支持 host 网络模式

先把这个结论的放在前面&#xff0c;直接访问链接就能看到官方文档中已经明确说了不支持。 参考链接&#xff1a;docker desktop for windows 不支持 host 网络模式 以前对于 docker 的网络模式&#xff0c;一直只是了解&#xff0c;没有亲自尝试过。结果今天在尝试 docker 的 …

06 - RS 触发器

---- 整理自B站UP主 踌躇月光 的视频 1. R-S 触发器电路电路 RSQQ’00QQ’011010011100 刚上电时&#xff0c;输出的状态是不确定的&#xff0c;只确定两个输出是相反的。 S0&#xff0c;R0 时候&#xff0c;Q 状态保持不变 S1&#xff0c;R0 时候&#xff0c;Q 状态被设置为 1…

X.509数字证书的结构与解析

1、什么叫数字签名 数字签名&#xff1a; 将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证&#xff1a;只要改动报文中任何一位&#xff0c;重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。 将该报文摘要值用发送者的私…

关于Idea无法正常启动

编辑这个文件 最后一行 加上 pause 双击文件 会显示报错信息

4.4学习总结

一.线段树概念 一.定义: 线段树是一种二叉搜索树&#xff0c;而二叉搜索树&#xff0c;首先满足二叉树&#xff0c;即每个结点最多有两颗子树&#xff0c;并且是一颗搜索树&#xff0c;我们要知道&#xff0c;线段树的每个结点都存储了一个区间&#xff0c;也可以理解成一个线…