21xrx.com
2025-07-06 06:11:26 Sunday
文章检索 我的文章 写文章
C++顺序表代码实现
2023-07-04 22:45:53 深夜i     16     0
C++ 顺序表 代码实现

C++顺序表是一种非常常见的数据结构,它是由一组连续的内存空间组成的线性表,可以方便地对其中的元素进行增删查改操作。本文将介绍如何使用C++编写顺序表的代码实现。

先来看一下顺序表的基本数据结构:

template <typename T>
class SeqList {
public:
  SeqList(int size = 10) {
    data = new T[size];
    len = 0;
    max_size = size;
  }
  ~SeqList() {
    delete[] data;
  }
  int length() const {
    return len;
  }
  bool isEmpty() const {
    return len == 0;
  }
  bool isFull() const {
    return len == max_size;
  }
  T& at(int i) {
    if (i < 0 || i >= len) {
      std::cerr << "Error: Index out of range.\n";
      exit(1);
    }
    return data[i];
  }
  void insert(int i, T elem) {
    if (isFull()) {
      std::cerr << "Error: The list is full.\n";
      exit(1);
    }
    if (i < 0 || i > len) {
      std::cerr << "Error: Index out of range.\n";
      exit(1);
    }
    for (int j = len; j > i; j--) {
      data[j] = data[j - 1];
    }
    data[i] = elem;
    len++;
  }
  void remove(int i) {
    if (isEmpty()) {
      std::cerr << "Error: The list is empty.\n";
      exit(1);
    }
    if (i < 0 || i >= len) {
      std::cerr << "Error: Index out of range.\n";
      exit(1);
    }
    for (int j = i; j < len - 1; j++) {
      data[j] = data[j + 1];
    }
    len--;
  }
private:
  T* data;
  int len;
  int max_size;
};

在上面的代码中,我们使用了模板类来实现了一个通用的顺序表。具体来说,我们通过定义一个类型为T的指针来保存数据,使用变量len来表示表长,变量max_size来表示顺序表的最大存储大小。在insert和remove函数中,我们分别使用了循环来实现元素的插入和删除操作。

接下来我们来看一些顺序表相关的使用示例。

#include <iostream>
#include "SeqList.hpp"
int main() {
  SeqList<int> s(10);
  std::cout << "Insert 0-9: ";
  for (int i = 0; i < 10; i++) {
    s.insert(i, i);
  }
  for (int i = 0; i < s.length(); i++) {
    std::cout << s.at(i) << " ";
  }
  std::cout << std::endl;
  std::cout << "Remove number of 5: ";
  s.remove(5);
  for (int i = 0; i < s.length(); i++) {
    std::cout << s.at(i) << " ";
  }
  std::cout << std::endl;
  std::cout << "Is empty: " << (s.isEmpty() ? "yes" : "no") << std::endl;
  std::cout << "Is full: " << (s.isFull() ? "yes" : "no") << std::endl;
  return 0;
}

在上面的示例代码中,我们首先创建了一个SeqList 类型的对象s,然后通过调用insert函数向其中插入了0~9的整数,最后使用at函数遍历输出了顺序表中的所有元素。接着,我们使用remove函数从顺序表中删除了第5个元素,再次使用at函数遍历输出顺序表中的所有元素。最后,我们通过调用isEmpty和isFull函数来判断顺序表是否为空和是否已满,返回不同的结果。

通过本文的介绍,相信大家已经了解了如何使用C++编写顺序表的代码实现,希望能对大家有所帮助!

  
  

评论区