zoukankan      html  css  js  c++  java
  • C++顺序表(模板总结)

    C++顺序表(模板总结)

    总结:

    1、模板类的实质是什么:让程序员写出和类型无关的代码

    2、模板的对象时什么:方法或者类

    3、是对类中的一系列操作,提供一个不固定数据类型的方法

    用模板做的类的时候要指明对象

    Stack<int>  intStack;  // int 类型的栈

    Stack<string> stringStack;    // string 类型的栈

    我们用的时候必须先指定   也就是先把这个参数传给T

    4、这里顺序表的实现可以先选择类型然后选择操作,因为一个类就是一个整体,属性+方法。

    5、C++动态创建用new关键词,也就是动态指定数组大小

      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(int length); // 构造函数
     17         SqListClass(); // 构造函数
     18         ~SqListClass(); // 析构函数
     19         void CreateList(T a[], int n); // 由a数组中的元素建造顺序表
     20         void DispList(); // 输出顺序表L中的所有元素
     21         int ListLength(); // 求顺序表的长度
     22         bool GetElem(int i, T &e); // 求顺序表中某序列号的元素值
     23         int LocateElem(T e); // 按元素查找其第一个序号位置
     24         bool ListInsert(int i, T e); // 在位置i插入数据元素e
     25         bool ListDelete(int i); // 在位置i删除数据元素
     26         void ReverseList(SqListClass<T> &L); // 翻转顺序表
     27         
     28         //操作时候的函数
     29 //        void CreateList_();
     30 //        void QuitSystem(); 
     31 };
     32 
     33 // 线性表的初始化
     34 template<class T>
     35 SqListClass<T>::SqListClass(int length) // 构造函数
     36 {
     37     data = new T[length];
     38     length = 0;
     39 }
     40 template<class T>
     41 SqListClass<T>::SqListClass() // 构造函数
     42 {
     43     data = new T[maxSize];
     44     length = 0;
     45 }
     46 // 线性表的销毁
     47 template<class T>
     48 SqListClass<T>::~SqListClass() // 析构函数
     49 {
     50     delete [] data;
     51 }
     52 
     53 // 实现
     54 
     55 // 线性表的创建,时间复杂度为O(n)
     56 template<class T>
     57 void SqListClass<T>::CreateList(T a[], int n)
     58 {
     59     int i;
     60     for(i=0; i<n; i++){
     61         data[i] = a[i];
     62     }
     63     length = i;
     64 }
     65 
     66 // 输出线性表的所有元素,时间复杂度为O(n)
     67 template<class T>
     68 void SqListClass<T>::DispList(){
     69     cout << "Out:" << endl;
     70     for(int i=0; i<length; i++){
     71         cout << data[i] << " ";
     72     }
     73     cout << endl;
     74 }
     75 
     76 // 求线性表的长度,时间复杂度为O(1)
     77 template<class T>
     78 int SqListClass<T>::ListLength(){
     79     return length;
     80 }
     81 
     82 // 求顺序表中某序列号的元素值,,时间复杂度为O(1)
     83 template<class T>
     84 bool SqListClass<T>::GetElem(int i, T &e){
     85     if(i<0 || i>length) return false;
     86     e = data[i-1];
     87     return true;
     88 }
     89 
     90 // 按元素查找其第一个序号位置,时间复杂度为O(n)
     91 template<class T>
     92 int SqListClass<T>::LocateElem(T e){
     93     int i = 0;
     94     while(i<length && data[i]!=e) i++;
     95     if(i>=length) return 0;
     96     else return i+1;
     97 }
     98 
     99 // 在位置i插入数据元素e,时间复杂度为O(n)
    100 template<class T>
    101 bool SqListClass<T>::ListInsert(int i, T e){
    102     if(i<0 || i>length) return false;
    103     for(int j=length; j>=i; j--){
    104         data[j]=data[j-1];
    105     }
    106     data[i-1] = e;
    107     length++;
    108     return true;
    109 }
    110 
    111 // 在位置i删除数据元素,时间复杂度为O(n)
    112 template<class T>
    113 bool SqListClass<T>::ListDelete(int i){
    114     if(i<0 || i>length) return false;
    115     for(int j=i-1; j< length; j++){
    116         data[j] = data[j+1];
    117     }
    118     length--;
    119     return true;
    120 }
    121 
    122 // 翻转顺序表
    123 template<class T>
    124 void SqListClass<T>::ReverseList(SqListClass<T> &L){
    125     T temp;
    126     for(int j=0; j<L.length/2; j++){
    127         temp = L.data[j];
    128         L.data[j] = L.data[length-j-1];
    129         L.data[length-j-1] = temp;
    130     }
    131 }
    132 
    133 /***********************************分界线***********************************/
    134 // 创建顺序表
    135 
    136 void CreateList_(){
    137     cout<<"请输入顺序表长度"<<endl;
    138     int length;
    139     do{
    140         cin>>length;
    141         if(length<=0) cout<<"顺序表长度不合法,请重新输入"<<endl;
    142     }while(length<=0);
    143     cout<<"请选择顺序表类型:输入类型后面的数字"<<endl;
    144     int type;
    145     do{
    146         cout<<"int:1    double:2   string:3"<<endl; 
    147         cin>>type;
    148         if(type<=0||type>=4) cout<<"类型输入不合法,请重新输入"<<endl;
    149     }while(type<=0||type>=4);
    150     
    151     
    152     //创建 
    153     SqListClass<int> sqList(length);
    154     
    155     cout<<"创建线性表成功^_^"<<endl; 
    156 }
    157 
    158 // 退出系统 
    159 void QuitSystem(){
    160     cout<<"成功退出系统-_-"<<endl; 
    161 }
    162 
    163 // 主函数
    164 int main(){
    165     int length=10;
    166     SqListClass<int> sqList(length);
    167     
    168     int demand=1;
    169     
    170     while(demand){
    171         cout<<endl;
    172         cout<<"---------------------------------顺序表操作指令---------------------------------"<<endl; 
    173         cout<<"*、输入数字 1 ,创建顺序表"<<endl; 
    174         cout<<"*、输入数字 0 ,退出系统 "<<endl; 
    175         cout<<"--------------------------------------------------------------------------------"<<endl;
    176         cin>>demand;
    177         switch(demand){
    178             case 1: CreateList_();break;
    179             case 0: QuitSystem();return 0;
    180         } 
    181     }
    182     
    183 //    int arr[3] = {3,4,5};
    184 //    // 创建线性表
    185 //    sqList.CreateList(arr, 3);
    186 //    // 输出线性表
    187 //    sqList.DispList();
    188 //    // 输出线性表的长度
    189 //    cout << "sqList length is " << sqList.ListLength() << endl;
    190 //    // 求第二个位置的元素
    191 //    int a;
    192 //    sqList.GetElem(2, a);
    193 //    cout <<"The 2 local is elem " << a << endl;
    194 //    // 查找元素5的位置
    195 //    cout << "The elem 5 local is " << sqList.LocateElem(5) << endl;
    196 //    // 在位置4插入元素6
    197 //    sqList.ListInsert(2, 6);
    198 //    sqList.DispList();
    199 //    // 在位置1删除数据元素
    200 //    sqList.ListDelete(1);
    201 //    sqList.DispList();
    202 //    // 翻转顺序表
    203 //    sqList.ReverseList(sqList);
    204 //    sqList.DispList();
    205     return 0;
    206 }
  • 相关阅读:
    解决ListView异步加载数据之后不能点击的问题
    android点击实现图片放大缩小 java技术博客
    关于 数据文件自增长 的一点理解
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Linux 超级用户的权利
    RAC 实例 迁移到 单实例 使用导出导入
    Shell 基本语法
    Linux 开机引导与关机过程
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Oracle RAC + Data Guard 环境搭建
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8207332.html
Copyright © 2011-2022 走看看