C++实现数据结构的顺序表详解

C++实现数据结构的顺序表详解

介绍

在进行程序开发时,常常需要对数据进行存储和操作。其中一种数据结构是顺序表,它提供了一种在内存中线性存储数据的方法,能够方便地对数据进行插入、删除、查找等操作。本文将详细介绍如何使用C++实现数据结构的顺序表,帮助读者掌握顺序表的创建、插入、删除、查找等操作。

创建顺序表

顺序表可以使用数组来实现。下面的代码展示了如何创建一个长度为10的顺序表,其中元素类型为整型:

#define MAX_SIZE 10

class SeqList {
public:
    SeqList() {
        m_size = 0;
    }

    void insert(int pos, int value) {
        //确保插入位置合法
        if (pos < 0 || pos > m_size) {
            return;
        }

        //如果列表已满,则无法插入新的元素
        if (m_size == MAX_SIZE) {
            return;
        }

        //将插入位置及之后的元素向后移动一位
        for (int i = m_size; i > pos; --i) {
            m_data[i] = m_data[i-1];
        }

        //在插入位置处插入新的元素
        m_data[pos] = value;

        //更新列表长度
        ++m_size;
    }

    void remove(int pos) {
        //确保删除位置合法
        if (pos < 0 || pos >= m_size) {
            return;
        }

        //将删除位置之后的元素向前移动一位
        for (int i = pos + 1; i < m_size; ++i) {
            m_data[i-1] = m_data[i];
        }

        //更新列表长度
        --m_size;
    }

    int find(int value) {
        for (int i = 0; i < m_size; ++i) {
            if (m_data[i] == value) {
                //返回元素在列表中的位置
                return i;
            }
        }

        //如果没有找到该元素,则返回-1
        return -1;
    }

private:
    int m_data[MAX_SIZE];
    int m_size;
};

插入和删除元素

在顺序表中插入和删除元素的操作比较简单。当需要在顺序表的pos位置插入新元素value时,应将pos及之后的元素都向后移动一位,然后在pos处插入新元素。删除元素pos时,应将pos之后的元素都向前移动一位。

例如,如果想在下面这个列表中插入元素3:

1, 2, 4, 5, 6

则应将4, 5, 6向后移动一位,变成:

1, 2, 4, 5, 5, 6

然后在空出的位置2处插入新元素3,得到:

1, 2, 3, 4, 5, 6

如果要删除元素4,则应将5和6向前移动一位,得到:

1, 2, 5, 6

查找元素

查找元素在顺序表中的位置的操作也比较简单,只需要遍历整个列表,逐个比较每个元素是否等于待查找的元素值。

例如,如果要查找下面这个列表中元素5的位置:

1, 2, 3, 4, 5, 6

则需要逐个比较每个元素是否等于5,直到找到对应位置,即4。

示例

下面展示两个完整的示例,演示如何使用C++编写顺序表的相关操作。

示例1:插入和删除元素

下面的代码演示如何创建一个长度为5的顺序表,并在其中插入和删除元素:

#include <iostream>

using namespace std;

#define MAX_SIZE 5

class SeqList {
public:
    SeqList() {
        m_size = 0;
    }

    void insert(int pos, int value) {
        //确保插入位置合法
        if (pos < 0 || pos > m_size) {
            return;
        }

        //如果列表已满,则无法插入新的元素
        if (m_size == MAX_SIZE) {
            return;
        }

        //将插入位置及之后的元素向后移动一位
        for (int i = m_size; i > pos; --i) {
            m_data[i] = m_data[i-1];
        }

        //在插入位置处插入新的元素
        m_data[pos] = value;

        //更新列表长度
        ++m_size;
    }

    void remove(int pos) {
        //确保删除位置合法
        if (pos < 0 || pos >= m_size) {
            return;
        }

        //将删除位置之后的元素向前移动一位
        for (int i = pos + 1; i < m_size; ++i) {
            m_data[i-1] = m_data[i];
        }

        //更新列表长度
        --m_size;
    }

    int find(int value) {
        for (int i = 0; i < m_size; ++i) {
            if (m_data[i] == value) {
                //返回元素在列表中的位置
                return i;
            }
        }

        //如果没有找到该元素,则返回-1
        return -1;
    }

private:
    int m_data[MAX_SIZE];
    int m_size;
};

int main() {
    SeqList list;

    //插入元素1和2
    list.insert(0, 1);
    list.insert(1, 2);

    //打印当前列表
    cout << "当前列表:";
    for (int i = 0; i < list.size(); ++i) {
        cout << list[i] << " ";
    }
    cout << endl;

    //插入元素3
    list.insert(1, 3);

    //打印当前列表
    cout << "当前列表:";
    for (int i = 0; i < list.size(); ++i) {
        cout << list[i] << " ";
    }
    cout << endl;

    //删除元素1
    list.remove(0);

    //打印当前列表
    cout << "当前列表:";
    for (int i = 0; i < list.size(); ++i) {
        cout << list[i] << " ";
    }
    cout << endl;

    return 0;
}

输出结果为:

当前列表:1 2 
当前列表:1 3 2 
当前列表:3 2

示例2:查找元素

下面的代码演示如何创建一个长度为10的顺序表,并在其中查找元素:

#include <iostream>

using namespace std;

#define MAX_SIZE 10

class SeqList {
public:
    SeqList() {
        m_size = 0;
    }

    void insert(int pos, int value) {
        //确保插入位置合法
        if (pos < 0 || pos > m_size) {
            return;
        }

        //如果列表已满,则无法插入新的元素
        if (m_size == MAX_SIZE) {
            return;
        }

        //将插入位置及之后的元素向后移动一位
        for (int i = m_size; i > pos; --i) {
            m_data[i] = m_data[i-1];
        }

        //在插入位置处插入新的元素
        m_data[pos] = value;

        //更新列表长度
        ++m_size;
    }

    void remove(int pos) {
        //确保删除位置合法
        if (pos < 0 || pos >= m_size) {
            return;
        }

        //将删除位置之后的元素向前移动一位
        for (int i = pos + 1; i < m_size; ++i) {
            m_data[i-1] = m_data[i];
        }

        //更新列表长度
        --m_size;
    }

    int find(int value) {
        for (int i = 0; i < m_size; ++i) {
            if (m_data[i] == value) {
                //返回元素在列表中的位置
                return i;
            }
        }

        //如果没有找到该元素,则返回-1
        return -1;
    }

private:
    int m_data[MAX_SIZE];
    int m_size;
};

int main() {
    SeqList list;

    //插入元素1到10
    for (int i = 1; i <= 10; ++i) {
        list.insert(i-1, i);
    }

    //查找元素7
    int pos = list.find(7);

    if (pos == -1) {
        cout << "没有找到元素7" << endl;
    } else {
        cout << "元素7的位置为:" << pos << endl;
    }

    return 0;
}

输出结果为:

元素7的位置为:6

总结

本文介绍了如何使用C++实现数据结构的顺序表。创建顺序表可以使用数组来实现,然后可以实现插入、删除、查找等操作。代码示例演示了如何实现插入、删除、查找操作,并且提供了两个完整的示例,帮助读者理解顺序表的操作。顺序表是一种比较简单但实用的数据结构,掌握其原理和使用方法有助于提升编程技能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现数据结构的顺序表详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • java实现队列queue数据结构详解

    Java实现队列(Queue)数据结构详解 什么是队列(Queue) 队列(Queue),是一种先进先出(First In First Out, FIFO)的数据结构,即最先进入队列的元素也会最先出队列。 队列具备两个基本操作:入队(enqueue)和出队(dequeue)。入队操作将元素加入到队列的尾部,出队操作将元素从队列头部取出并删除。 Java中的Q…

    数据结构 2023年5月17日
    00
  • JavaScript 数据结构之散列表的创建(2)

    下面是详细讲解“JavaScript 数据结构之散列表的创建(2)”的完整攻略。 散列表(哈希表) 散列表是一种数据结构,使用哈希函数将键映射到索引。散列表可以在常量时间 O(1) 中进行插入、删除和查找操作,但也具有碰撞冲突问题。 碰撞冲突问题 在散列表中,当两个不同的键通过哈希函数映射到了同一个索引位置时,就会发生碰撞冲突问题。解决碰撞冲突问题的方法有很…

    数据结构 2023年5月17日
    00
  • C语言数据结构之平衡二叉树(AVL树)实现方法示例

    C语言数据结构之平衡二叉树(AVL树)实现方法示例 介绍 AVL树是一种自平衡二叉搜索树,它保证了所有节点的左右子树高度差不超过1,从而提高了查找、插入和删除操作的效率。本篇文章将介绍如何使用C语言实现AVL树,并提供两个例子以说明实现方法。 实现方法 结构体定义 首先,定义AVL树节点的结构体,包括该节点存储的值、该节点的高度、该节点的左右子树指针。 ty…

    数据结构 2023年5月17日
    00
  • Android开发数据结构算法ArrayList源码详解

    Android开发数据结构算法ArrayList源码详解 概述 Android开发中,大量使用到了数据结构和算法,ArrayList便是其中的一种非常重要的数据结构。ArrayList是Java中非常重要且使用率非常高的一种数据结构,Android开发中也经常使用它来存储数据。本文将深入探究ArrayList的源码,帮助读者更好地理解其工作原理和使用方法。 …

    数据结构 2023年5月17日
    00
  • Java深入了解数据结构之哈希表篇

    Java深入了解数据结构之哈希表篇 1. 哈希表的定义 哈希表(Hash Table),也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(Hash Function)。 哈希表是基于哈希函数实现的,哈希函数将关键字映射到哈希表中的位置,如果存在两个…

    数据结构 2023年5月17日
    00
  • Java数据结构之线性表

    Java数据结构之线性表完整攻略 什么是线性表 线性表是n个数据元素的有限序列,其中数据元素的类型相同。线性表中含有首元素和末元素。若表中只有一个数据元素,则该数据元素既是首元素又是末元素,这个数据元素成为线性表的唯一元素。 线性表的基本操作 初始化操作 initList(List L):建立一个空的线性表L 插入操作 insert(List L, int …

    数据结构 2023年5月17日
    00
  • C语言 数据结构堆排序顺序存储(升序)

    C语言 数据结构堆排序顺序存储(升序)攻略 1. 堆排序概述 堆排序是一种常见的排序算法,通过构建最大堆或最小堆来实现排序。本文介绍的是使用顺序存储方式实现的最大堆排序,也就是升序排序。 2. 最大堆的定义和实现 最大堆指的是堆结构中父节点的值大于子节点的值,根节点的值最大。对于一棵完全二叉树,若父节点的下标为i,则其左子节点的下标为2i+1,右子节点的下标…

    数据结构 2023年5月17日
    00
  • php数据结构与算法(PHP描述) 查找与二分法查找

    以下是详细讲解“php数据结构与算法(PHP描述) 查找与二分法查找”的完整攻略。 1. 数据结构与算法简介 数据结构是计算机中存储和组织数据的方式。它涉及到数据的表示、处理和存储方式等。 算法则是完成特定任务的步骤集合。算法设计可以优化计算机程序的效率和速度。 PHP是一种非常流行的服务器端脚本语言,数据结构和算法对web开发者来说非常重要。因此,我们需要…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部