zoukankan      html  css  js  c++  java
  • 基于C++的顺序表的实现

    顺序表,是数据结构中按顺序方式存储的线性表,又称向量。具有方便检索的特点。以下,是笔者学习是基于C++实现的顺序表代码,贴上来当网页笔记用。

    #include <iostream>
    using namespace std;
    template <class T>
    class List{
     void clear();//释放顺序表 
     bool isEmpty();//判断顺序表是否为空 
     bool append(const T value);//在顺序表后添加value值 
     bool insert(const int p,const T value);//在p位置插入value值 
     bool del(const int p);//删除在p位置的值 
     bool getValue(const int p,T& value);//将p位置的值赋予value 
     bool setValue(const int p,const T value);//将p位置的值设置为value 
     bool getPos(int &p,const T value);//将值为value的位置赋予p 
    };
    template <class T>
    class arrList:public List<T> {
     private:
      T *aList; //存储顺序表的实例 
      int maxSize;//顺序表的最大值 
      int curLen;//顺序表的实际长度 
      int position;//顺序表的当前处理位置 
     public:
      arrList(const int size){//初始化顺序表 
       maxSize=size;
       aList=new T[maxSize];
       curLen=position=0;
      }
    
      ~arrList(){//消除表实例 
       delete [] aList;
      }
      void clear(){//清空顺序表,成为空表 
       delete [] aList;
       curLen=position=0;
       aList=new T[maxSize];
      }
      bool isEmpty(){
      /*判断顺序表是否为空
      若curLen为空,即当前实际长度为空,即为空表 
      */
       if(curLen==0){
        return true;
       }else{
        return false;
       }
      } 
      int length(){
       //返回顺序表的当前长度 
       return curLen; 
      }
      bool append(const T value){
       /*
       在顺序表末插入value
       实际长度+1 
       */
       aList[curLen]=value;
       curLen++;
      }
      bool insert(const int p,const T value){
       int i;
       if(curLen>=maxSize){
        /*判断顺序表是否已满*/
        cout<<"The list is overflow"<<endl;
        return false;
       }
       if(p<0||p>curLen){
        /*判断请求合理性*/
        cout<<"Insertion point is illegal"<<endl;
        return false;
        
       }
       for(i=curLen;i>p;i--){
        /*将p后的数据后移*/
        aList[i]=aList[i-1];
       
        
       }
        /*将值置于p,curLen位置加1*/
        aList[p]=value;
        curLen++;
        return true;
      }
      bool del(const int p){
       int i;
       /*判断当前表是否为空,为空不删除*/
       if(curLen<=0){
        cout<<"No element to del"<<endl;
        return false;
       }
       /*判断请求合理性*/
       if(p<0||p>curLen-1){
         cout<<"deletion is illegal"<<endl;
         return false;
       }
       /*将位置p后的值前移,覆盖*/ 
       for(i=p;i<curLen-1;i++){
        aList[i]=aList[i+1];
        
       }
       curLen--;
       return true;
      }
      bool getValue(const int p,T& value){
       //判断请求合理性 
       if(p<0||p>curLen-1){
        cout<<"No such element"<<endl;
        return false;
       }
       value=aList[p];
      }
      bool setValue(const int p,const T value){
       //判断请求合理性 
       if(p<0||p>curLen-1){
        cout<<"No such element"<<endl;
        return false;
       }
       aList[p]=value;
      }
      bool getPos(int &p,const T value){
       int i;
       for(i=0;i<curLen;i++){
        if(value==aList[i]){
         p=i;
         return true;
        }
        return false;
       }
      }
    };
    
  • 相关阅读:
    [Bash] Shortcut
    [Bash] Rerun Bash Commands with History Expansions (!! & !$)
    [Bash] Create and Copy Multiple Files with Brace Expansions in Bash
    [Bash] Add Executable Files to $PATH with Bash
    [Typescript] Create Type From Any Given Data in TypeScript
    [Typescript] Ignore Null or Undefined Values with TypeScript Non-Null Assertion Operator
    [Bash] Chain Commands with Pipes and Redirect Output in Bash
    [Bash] Use Conditional Statements in Bash
    [Bash] Understand Exit Statuses in Bash
    监听内容变化 TextWatcher @功能 [MD]
  • 原文地址:https://www.cnblogs.com/Seanit/p/3420654.html
Copyright © 2011-2022 走看看