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;
    }
  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7155134.html
Copyright © 2011-2022 走看看