• C++ 线性表模板的使用


    SeqList.h

    #pragma once
    #include <iostream>
    
    const int MAXSIZE = 100;
    template <class T>
    class SeqList
    {
    public:
        // 无参数的构造函数
        SeqList();
        //有参数的构造函数,使用含有n个元素的数组,并且长度为n
        SeqList(const T a[], int n);        
        ~SeqList();
    
        // 按次序遍历顺序表的各个元素
        void PrintList();
    
        // 在第i 位置插入x
        void Insert(int i, T x);
    
        //删除顺序表中的第i个元素
        T Delete(int i);
    
        //获取顺序表上的第i个元素
        T Get(int i);
    
        //查找顺序表上值为x的元素
        int Locate(T x);
    
    private:
        int length;
        T data[MAXSIZE];
    };
    
    #include <iostream>
    
    template <class T>
    SeqList<T>::SeqList(const T a[], int n){
        if (n > MAXSIZE)
            throw "数组长度超过顺序表最大长度";
        for (int i = 0; i < n; i++){
            data[i] = a[i];
        }
        length = n;
    
    }
    
    template <class T>
    int SeqList<T>::Locate(T x)
    {
        for (int i = 0; i < length; i++){
            if (x == data[i])
                return i + 1;
        }
        return -1;
    }
    
    template <class T>
    T SeqList<T>::Get(int i)
    {
        if (i<0 || i>length)
            throw "查找位置非法";
        return data[i - 1];
    }
    
    template <class T>
    T SeqList<T>::Delete(int i)
    {
        if (0 == length)
            throw "下溢异常";
        if (i<1 || i>length)
            throw "位置异常";
        T x = data[i-1];
        for (int j = i; j < length; j++){
            data[j - 1] = data[j];
        }
        length--;
        return x;
    
    }
    
    template <class T>
    void SeqList<T>::Insert(int i, T x)
    {
        if (length >= MAXSIZE)
            throw "上溢异常";
        if (i<1 || i>length + 1)
            throw "位置异常";
        i = i - 1;
        for (int j = length; j >= i; j--)
        {
            data[j] = data[j - 1];
        }
        data[i] = x;
        length++;
    
    }
    
    template <class T>
    void SeqList<T>::PrintList()
    {
        std::cout << "按序号依次遍历线性表中的各个元素" << std::endl;
        for (int i = 0; i < length; i++){
            std::cout << data[i] << " ";
        }
        std::cout << std::endl;
    }
    
    template <class T>
    SeqList<T>::~SeqList()
    {
    
    }
    
    template <class T>
    SeqList<T>::SeqList()
    {
    
    }

    main.cpp

    #include "SeqList.h"
    #include <stdlib.h>
    
    int main(){
    
        int a[7] = { 1, 2, 3, 4, 5, 6, 7 };
        SeqList<int> list(a, 7);
        list.PrintList();
    
        list.Insert(1, 0);
        list.PrintList();
    
        int x = list.Delete(8);
        std::cout << "删除的元素:" << x << std::endl;
        list.PrintList();
    
        int p = list.Locate(4);
        std::cout << "元素4的位置:" << p << std::endl;
    
        system("pause");
        return 0;
    }

    运行结果
    这里写图片描述

  • 相关阅读:
    java序列化
    网络协议-TCP/IP
    Java 网络IO编程总结
    Java实用类库
    SpringMVC拦截器-性能监控
    java大数据导出
    打包SDK总结,
    iOS UIButton 传递多个参数
    iOS 开发权限设置
    iOS怎么显示html父文本上的内容
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538207.html
Copyright © 2020-2023  润新知