线性表 - C++

本文介绍了线性表的基本概念,包括其有限性、元素的顺序性,并探讨了线性表的动态数组和动态链表两种实现方式。通过VisuAlgo、Data Structure Visualizations和Data Structure Simulator等工具,展示了线性表、数组、链表、栈和队列的可视化,帮助理解线性表的结构和操作。此外,还提到了线性表在音乐播放列表等实际应用中的使用。
摘要由CSDN通过智能技术生成

1. 什么是线性表

线性表是数据结构中的一种基本数据类型,
它是由 n 个数据元素组成的有限序列

线性表的特点如下:

  1. 表中元素个数有限
  2. 表中元素具有逻辑上的顺序性,表中元素有其先后次序
  3. 表中元素都是数据元素,每个元素都是单个元素
  4. 除第一个元素外,每一个元素有且只有一个直接前驱元素,
  5. 除了最后一个元素外,每一个元素有且只有一个直接后继元素

2. 线性表的实现

一种数据结构的逻辑结构根据需要可表示成多种存储结构

这里线性表的逻辑结构分别用 动态数组 和 动态链表 的存储结构进行实现

  • 动态数组

    #include <iostream>
    using namespace std;
    
    /*
    	这个类实现了线性表的基本操作,
    	包括构造函数、析构函数、获取线性表长度、获取线性表容量、判断线性表是否为空、判断线性表是否已满、
    	清空线性表、获取指定位置的元素
    */
    
    class LinearList {
         
    private:
        int* data;      // 动态数组
        int length;     // 线性表长度
        int capacity;   // 动态数组容量
    
    public:
        // 构造函数,初始化空线性表
        LinearList(int cap = 10) {
         
            data = new int[cap];
            length = 0;
            capacity = cap;
        }
    
        // 析构函数,释放动态数组
        ~LinearList() {
         
            delete[] data;
        }
    
        // 获取线性表长度
        int getLength() {
         
            return length;
        }
    
        // 获取线性表容量
        int getCapacity() {
         
            return capacity;
        }
    
        // 判断线性表是否为空
        bool isEmpty() {
         
            return length == 0;
        }
    
        // 判断线性表是否已满
        bool isFull() {
         
            return length == capacity;
        }
    
        // 清空线性表
        void clear() {
         
            length = 0;
        }
    
        // 获取指定位置的元素
        int get(int index) {
         
            if (index < 0 || index >= length) {
         
                cout << "Index out of bounds!" << endl;
                return -1;
            }
            return data[index];
        }
    
        // 设置指定位置的元素
        void set(int index, int value) {
         
            if (index < 0 || index >= length) {
         
                cout << "Index out of bounds!" << endl;
                return;
            }
            data[index] = value;
        }
    
        // 在指定位置插入元素
        void insert(int index, int value) {
         
            if (index < 0 || index > length) {
         
                cout << "Index out of bounds!" << endl;
                return;
            }
            if (isFull()) {
         
                cout << "LinearList is full!" << endl;
                return;
            }
            // 将插入位置后面的元素依次向后移动一位
            for 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值