• 顺序表 C++ 类模板实现


    • 顺序表的C++语言描述

    • 基本运算的算法——置空表、求表的长度、取结点、定位运算、插入运算、删除运算、建立顺序表、输出顺序表

     

     

    #include <iostream>
    using namespace std;
    #define OK 1
    #define ERROR 0
    template <class T>
    class Linklist
    {
    public:
    Linklist()
    {

     

    }
    int initLinklist(Linklist < T > & L,int maxlistsize = 100);//初始化大小为100
    int Getlength(Linklist < T > & L);
    int Getmaxsize(Linklist < T > & L);
    int DestroyList(Linklist < T > & L);
    ~Linklist() //销毁函数
    {
    cout<<"DestroyList"<<endl;
    };
    int ClearList(Linklist < T > & L);
    void ShowList(Linklist < T > & L);
    bool GetElem(Linklist < T > & L , int i , T &e);//获得第i个元素,e必须是T类型的,例如int e
    T LocateElem(Linklist < T > & L , T & e);//找到e个元素的位置
    T InsertElem(Linklist < T > & L , int i , T &e);//插入
    int length;
    int maxsize;
    int *elem;
    };

     

    template<class T>
    int Linklist<T>::initLinklist( Linklist &L,int maxlistsize)//创建新顺式表
    {
    L.maxsize = maxlistsize;
    L.length = 0;
    elem = new T [maxlistsize] ;
    if(!L.elem)return -1;
    else return 1;
    }

     

    template<class T>
    int Linklist<T>::Getlength( Linklist &L)
    {
    cout<<L.length<<endl;
    }

     

    template<class T>
    int Linklist<T>::Getmaxsize( Linklist &L)
    {
    cout<<L.maxsize<<endl;
    }

     

    template<class T>
    int Linklist<T>::DestroyList(Linklist <T> &L) //销毁顺式表
    {
    L.~Linklist();
    }

     

    template <class T>
    int Linklist<T>::ClearList(Linklist < T > &L) //清空顺式表
    {
    L.length = 0;
    if(L.length == 0)
    {
    cout<<"Clear OK"<<endl;
    return 1;
    }
    else
    {
    cout<<"Clear ERROR"<<endl;
    return 0;
    }
    }

     

    template <class T>
    void Linklist <T>::ShowList(Linklist <T> &L)
    {
    for(int i = 0 ; i<length ; i ++)
    cout<<L.elem[i]<<" ";
    cout<<endl;
    }

     

    template <class T>
    bool Linklist <T>::GetElem(Linklist <T> &L, int i ,T & e)
    {
    if(i<1||i>length - 1)
    {
    cout<<"i input error"<<endl;
    return false;
    }
    if(e = L.elem[i-1])
    return true;
    else return false;

     

    }

     

    template <class T>
    T Linklist <T>::LocateElem (Linklist <T> &L , T & e)
    {
    for(int i = 0 ; i < L.length ; i ++)
    {
    if( L.elem[i] == e)
    {
    return i;
    break;
    }
    }
    return -1;
    }

     

    template <class T>
    T Linklist<T>::InsertElem(Linklist <T> &L , int i , T & e)
    {
    if(i<1||i>L.length)return ERROR;
    for(int j = L.length ; j >i ; j--)
    {
    L.elem[j] = L.elem[j-1];
    }
    L.elem[i-1] = e;
    L.length ++;
    return 1;
    }
    int main()
    {
    Linklist<int> L;
    L.initLinklist(L,100);

     

    }

     

  • 相关阅读:
    [转] Linux下crontab命令的用法
    [转] Try to use one var statement per scope in JavaScript
    [转] 主流JS框架中DOMReady事件的实现
    MySQL 表复制语句
    [转] MySQL中的运算符展示
    [转] mysql分组取每组前几条记录(排名)
    MySQL 连接结果集
    [转] mysql show processlist命令 详解
    [转] mysql 5.0存储过程学习总结
    jquery中使用event.target的几点
  • 原文地址:https://www.cnblogs.com/Duskcl/p/3734040.html
Copyright © 2020-2023  润新知