zoukankan      html  css  js  c++  java
  • [C++]线性链表之顺序表<二>

    /*
      @content 线性链表之顺序表
      @date 2017-3-21 1:06
      @author Johnny Zen 
    */
    /*
    线性表
        顺序表
        链式表[带头指针/不带头指针] 
        单链表
        循环单链表 
    双向链表
    循环双链表      
    ADT
     
    List{ 
    属性:
      length     长度
      DataList;        数据 
    操作:
      init(array[])   表初始化
      Destory()    表销毁
      int getLength()  返回表的长度
      void InsertNode(int i,node) 按照位置i,插入表的结点
      void DeleteNode(int i,node) 按照位置i,删除表的结点
      void Delete(data)           按值删除表的结点 
      int Location(data)          按值查找,返回位置i[实际位置]
      Data Get(i)                 按位置查找,返回结点数据
      void sort()                 结点排序 
      bool Empty()                判空    
      void print()                遍历表   
    */
     
    //=================================
    //顺序表
    #include<iostream>
    using namespace std;
     
    const int MaxSize = 100;
    template<class T>
    class SeqList{
    public:
      SeqList();
      SeqList(T a[],int n);
      ~SeqList();
      int  Length(){ return length; }
        
      void Insert(int x,T data);
      void Delete(int x);
      int  Location(T data);
      T    Get(int i); 
     
      void print();
      bool Empty();
     
    private:
      int length;
      T datas[MaxSize];   
    }; 
     
    /***************方法实现区*******************/
    template<class T>
    SeqList<T>::SeqList(){
      length = 0;
    }
     
    template<class T>
    SeqList<T>::SeqList(T a[],int n){
      if(n>MaxSize){
        throw "数组长度超出!!";
      }
        
      for(int i = 0;i<n;i++){
        datas[i] = a[i];
      }
      length = n;
    }
     
    template<class T>
    SeqList<T>::~SeqList(){ }
     
    //插入到第i个位置上(实际位置)
    //    1 2 45 75 | 75 45 45  1 2
    //    0 1 2  3  |  4  5  6  7 8
    //    12 12 56  | 78 11  
    // i = 5 
    // [5] = [4]
    // [4] = [3]
    // [3] = [2]
    // [2] = [1]
    // [1] = [0]
    template<class T>
    void SeqList<T>::Insert(int x,T data){ 
      if(x>length+1||x<1)
        throw "位置超界!!!";
      if(length>=MaxSize)
        throw "位置溢出!!!";  
     
      for(int i=length;i>=x;i--){
        this->datas[i] = this->datas[i-1];  //最关键代码:从后面[length]开始往前走,元素向后挪 
      }
     
      this->datas[x-1] = data;
      length++;
     
    //按位置i(实际位置)删除结点 
    //    1 2 45 75 | 75 45 45  1 2
    //    0 1 2  3  |  4  5  6  7 8
    //    12 12 56  | 78 11 
    template<class T>
    void SeqList<T>::Delete(int x){  
        
        if(x<1||x>length)
              throw "位置异常";
          
      for(int i=x-1;i<length-1;i++) 
        this->datas[i] = this->datas[i+1]; 
        
      length--;
     
    //按值查找,返回位置(实际位置)
    template<class T> 
    int  SeqList<T>::Location(T data){
      datas[length] = data;     //在最后一个结点的后面设置哨兵 
      int i = 0;
      while(datas[i]!=data) 
        i++;
      if(i==length) return -1;  
        return ++i;      
    }
     
    //按位置(实际位置)查找,返回结点值 
    template<class T>
    T  SeqList<T>::Get(int i){
      if(i<1||i>length)
        throw "位置超界!!!";
      return datas[i-1];
     
    //遍历顺序表 
    template<class T>
    void SeqList<T>::print(){
      for(int i = 0;i<this->Length();i++)
        cout<<datas[i]<<" ";
    }
     
    template<class T>
    bool SeqList<T>::Empty(){
      if(length>0) 
        return false; //0
      return true;    //1
    }      
     
    //=================================
    int main(){
      int arr[]= {12,23,45,56,78};
      SeqList<int> test(arr,5);
     
      cout<<test.Get(5)<<endl; 
      cout<<test.Empty()<<endl;
      test.print();
      return 0;
    }
  • 相关阅读:
    安卓反编译
    Icesugar Gourd
    php文件写入
    java 序列化与反序列化
    Toj Dominoes Game
    adb&frida
    Markdown 测试用例
    iview InputNumber类输入框表单验证失效
    01背包问题(回溯算法实现)
    阅读作业二读Lost in CatB有感 by 李栋
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7155134.html
Copyright © 2011-2022 走看看