IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【数据结构】顺序表 -> 正文阅读

[数据结构与算法]【数据结构】顺序表


线性表:( linear list)是n个 具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表: 顺序表、链表、栈、队列、字符串...

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储

在这里插入图片描述

什么是顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构一般情况下采用数组存储。在数组上完成数据的增删查改。

  • 静态顺序表:使用定长数组存储元素

在这里插入图片描述

  • 动态顺序表:使用动态开辟的数组存储

在这里插入图片描述

顺序表代码实现

静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实现动态顺序表

  • SeqList.hpp
#pragma once
#include <iostream>
#include <cassert>

namespace ns_Seq{
    template <class T>
    class SeqList{
    private:
        T* arr;
        int size;
        int capacity;

    public:
        SeqList()
        :arr(nullptr)
        ,size(0)
        ,capacity(0)
        {}

    private:

        //检查空间,如果满了,进行增容
        void CheckCapacity(){
            if(size >= capacity){
                //看空间大小是否是0
                T newCapacity = capacity == 0 ? 4 : 2 * capacity;
                //开辟新空间
                T* newArr = new T[newCapacity];

                //把数据拷贝到新空间
                if (arr) {
                    for (int i = 0; i < size; ++i) {
                        newArr[i] = arr[i];
                    }
                }

                //释放原来空间
                delete [] arr;
                //arr指向新空间
                arr = newArr ;
                //更新capacity
                capacity = newCapacity;
            }
        }

    public:
        //顺序表在pos位置插入x
        void insert(size_t pos,const T& val){
            //检查容量
            CheckCapacity();
            assert(pos >= 0 && pos <= size);
            //挪动数据,pos位置后的数据统一后移一位
            for (int i = size; i > pos; --i) {
                arr[i] = arr[i - 1];
            }

            arr[pos] = val;
            size++;
        }

        // 顺序表删除pos位置的值
        void erase(size_t pos){
            assert(pos >= 0 && pos <= size);
            assert(size > 0);//保证顺序表不为空

            //挪动数据,pos位置后的数据统一前移一位
            for(int i = pos; i < size-1; ++i){
                arr[i] = arr[i+1];
            }

            //更新size
            size--;
        }


        //顺序表尾插
        void push_back(const T& val){
            insert(size,val);
        }
        //顺序表尾删
        void pop_back(){
            erase(size);
        }

        //顺序表头插
        void push_front(const T& val){
            insert(0,val);
        }
        //顺序表头删
        void pop_front(){
            erase(0);
        }


        //顺序表查找
        int find(const T& val){
            for(int i = 0; i < size; ++i){
                if(arr[i] == val){
                    return i;
                }
            }
            return -1;
        }
        //顺序表打印
        void printSeq(){
            for(int i = 0; i < size; i++){
                std::cout<< arr[i] << " ";
            }
            std::cout<<std::endl;
        }

    public:
        ~SeqList(){
            delete [] arr;
            size = 0;
            capacity = 0;
        }
    };
}

顺序表问题

  • 中间/头部插入删除时间复杂度O(N)
  • 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。
  • 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:54:55  更:2022-05-13 11:55:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:51:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码