首页 > 编程语言 >C++数据结构——顺序表

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

时间:2024-04-05 23:58:05浏览次数:27  
标签:index 顺序 int list C++ SequentialList elements 数据结构 size

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

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

标签:index,顺序,int,list,C++,SequentialList,elements,数据结构,size
From: https://blog.csdn.net/qq_48335434/article/details/137404893

相关文章

  • CLion + STM32CubeMX【嵌入式开发 _环境搭建_C++】
         做嵌入式开发,一定对Keil、IAR不陌生,可它俩那与现代IDE格格不入的远古画风让人脑壳着实发疼。好一点的解决方案就是IAR或Keil联调VSCode,即代码在VSCode编写(调试),在IAR或Keil编译烧录。以VSCode强大而丰富的插件功能和简约优美的画面,已经使开发体验有了大幅的提......
  • C++链表小册子
    目录1.简记2.多说两句3.算法题1.简记对于C++链表类的创建,有以下简记:堆分配,new作为右值。返回指针。对象生命周期手动管理,需要显式删除(delete)ListNodedummy(0);栈分配,返回ListNode。仅在作用域内生效(和常见的初始化int一样)。要得到ListNode指针需要&取地址2.多说两句......
  • 顺序表的实现
    在顺序表的实现中我们不会再像之前通讯录一样写菜单来调试了,而是用test函数来直接调用接口调试,因为菜单调试起来过于繁琐,而我们在写数据结构的时候是需要很多次调试函数功能的。所有接口#pragmaonce#include<stdio.h>#include<assert.h>#include<stdlib.h>#defineN......
  • C++基础——数组
    数组:就是相同数据类型的集合三种定义和初始化数组:(1)常规数组(C数组)定义最普通的一个定义方式,也是C语言风格数据类型数组名[数组大小](2)动态数组容器vector要加入头文件#include<vector>eg:定义一个整形类型的数组std::vector<int>num(10)push_back在容器后端增加元素......
  • 数据结构 第六章(图)【下】
    写在前面:本系列笔记主要以《数据结构(C语言版)》为参考(本章部分图片来源于王道),结合下方视频教程对数据结构的相关知识点进行梳理。所有代码块使用的都是C语言,如有错误欢迎指出。视频链接:第01周a--前言_哔哩哔哩_bilibili四、图的应用1、最小生成树(1)在一个连通网的所有生成树......
  • 数据结构 第五章(树和二叉树)【下】
    写在前面:本系列笔记主要以《数据结构(C语言版)》为参考(本章部分图片以及知识点整理来源于王道),结合下方视频教程对数据结构的相关知识点进行梳理。所有代码块使用的都是C语言,如有错误欢迎指出。视频链接:第01周a--前言_哔哩哔哩_bilibili哈夫曼树部分的代码参考了一位小伙伴分享的......
  • 十大排序算法的C++实现
    2024年4月5日排序算法一、稳定性的定义排序算法的稳定性是指排序过程中,相同元素的相对位置是否会发生变化。稳定的排序算法在排序过程中不会改变元素彼此的位置的相对次序,而不稳定的排序算法经常会改变这个次序。稳定性是一个特别重要的评估标准,排序算法的稳定性是一......
  • 洛谷P1000超级玛丽游戏C++
    题目描述超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。********************####....#.#..###.....##....###.......############......
  • C++(语法以及易错点2)
    1.内联函数 1.1概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。​intADD(inta,intb){returna+b;}​ 1.2特性 1.inline是一种以空间换时间的做法,如果编......
  • C++(语法以及易错点.1)
    1.函数重载 1.1函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。include<iostream>usingnamespacestd;//1、参数类型不同int......