• C++顺序表


    C++顺序表

      1 #include<iostream>
      2 
      3 using namespace std;
      4 
      5 int maxSize = 100;
      6 
      7 // 定义
      8 template <class T>
      9 class SqListClass
     10 {
     11     private:
     12         T *data; // 存放顺序表中的元素
     13         int length; // 存放顺序表的长度
     14 
     15     public:
     16         SqListClass(); // 构造函数
     17         ~SqListClass(); // 析构函数
     18         void CreateList(T a[], int n); // 由a数组中的元素建造顺序表
     19         void DispList(); // 输出顺序表L中的所有元素
     20         int ListLength(); // 求顺序表的长度
     21         bool GetElem(int i, T &e); // 求顺序表中某序列号的元素值
     22         int LocateElem(T e); // 按元素查找其第一个序号位置
     23         bool ListInsert(int i, T e); // 在位置i插入数据元素e
     24         bool ListDelete(int i); // 在位置i删除数据元素
     25         void ReverseList(SqListClass<T> &L); // 翻转顺序表
     26 };
     27 
     28 // 线性表的初始化
     29 template<class T>
     30 SqListClass<T>::SqListClass() // 构造函数
     31 {
     32     data = new T[maxSize];
     33     length = 0;
     34 }
     35 
     36 // 线性表的销毁
     37 template<class T>
     38 SqListClass<T>::~SqListClass() // 析构函数
     39 {
     40     delete [] data;
     41 }
     42 
     43 // 实现
     44 
     45 // 线性表的创建,时间复杂度为O(n)
     46 template<class T>
     47 void SqListClass<T>::CreateList(T a[], int n)
     48 {
     49     int i;
     50     for(i=0; i<n; i++){
     51         data[i] = a[i];
     52     }
     53     length = i;
     54 }
     55 
     56 // 输出线性表的所有元素,时间复杂度为O(n)
     57 template<class T>
     58 void SqListClass<T>::DispList(){
     59     cout << "Out:" << endl;
     60     for(int i=0; i<length; i++){
     61         cout << data[i] << " ";
     62     }
     63     cout << endl;
     64 }
     65 
     66 // 求线性表的长度,时间复杂度为O(1)
     67 template<class T>
     68 int SqListClass<T>::ListLength(){
     69     return length;
     70 }
     71 
     72 // 求顺序表中某序列号的元素值,,时间复杂度为O(1)
     73 template<class T>
     74 bool SqListClass<T>::GetElem(int i, T &e){
     75     if(i<0 || i>length) return false;
     76     e = data[i-1];
     77     return true;
     78 }
     79 
     80 // 按元素查找其第一个序号位置,时间复杂度为O(n)
     81 template<class T>
     82 int SqListClass<T>::LocateElem(T e){
     83     int i = 0;
     84     while(i<length && data[i]!=e) i++;
     85     if(i>=length) return 0;
     86     else return i+1;
     87 }
     88 
     89 // 在位置i插入数据元素e,时间复杂度为O(n)
     90 template<class T>
     91 bool SqListClass<T>::ListInsert(int i, T e){
     92     if(i<0 || i>length) return false;
     93     for(int j=length; j>=i; j--){
     94         data[j]=data[j-1];
     95     }
     96     data[i-1] = e;
     97     length++;
     98     return true;
     99 }
    100 
    101 // 在位置i删除数据元素,时间复杂度为O(n)
    102 template<class T>
    103 bool SqListClass<T>::ListDelete(int i){
    104     if(i<0 || i>length) return false;
    105     for(int j=i-1; j< length; j++){
    106         data[j] = data[j+1];
    107     }
    108     length--;
    109     return true;
    110 }
    111 
    112 // 翻转顺序表
    113 template<class T>
    114 void SqListClass<T>::ReverseList(SqListClass<T> &L){
    115     T temp;
    116     for(int j=0; j<L.length/2; j++){
    117         temp = L.data[j];
    118         L.data[j] = L.data[length-j-1];
    119         L.data[length-j-1] = temp;
    120     }
    121 }
    122 
    123 // 主函数
    124 int main(){
    125     SqListClass<int> sqList;
    126     int arr[3] = {3,4,5};
    127     // 创建线性表
    128     sqList.CreateList(arr, 3);
    129     // 输出线性表
    130     sqList.DispList();
    131     // 输出线性表的长度
    132     cout << "sqList length is " << sqList.ListLength() << endl;
    133     // 求第二个位置的元素
    134     int a;
    135     sqList.GetElem(2, a);
    136     cout <<"The 2 local is elem " << a << endl;
    137     // 查找元素5的位置
    138     cout << "The elem 5 local is " << sqList.LocateElem(5) << endl;
    139     // 在位置4插入元素6
    140     sqList.ListInsert(2, 6);
    141     sqList.DispList();
    142     // 在位置1删除数据元素
    143     sqList.ListDelete(1);
    144     sqList.DispList();
    145     // 翻转顺序表
    146     sqList.ReverseList(sqList);
    147     sqList.DispList();
    148     return 0;
    149 }
  • 相关阅读:
    关于网购心态
    c++ In STL maps, is it better to use map::insert than []? Stack Overflow
    小工具:sshcopyid_老王的技术手册 ( 我的新博客:http://huoding.com )_百度空间
    djangoqbe
    C++ STL map的使用
    容器find_if函数定义和其第三个参数重载的疑问
    ArchLinux的安装与配置
    使用Grub进行Linux的硬盘安装与修复
    MySQL数据类型简介
    ArchLinux下Alsa的简单配置
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8206065.html
Copyright © 2020-2023  润新知