zoukankan      html  css  js  c++  java
  • 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;
    }

    运行结果
    这里写图片描述

  • 相关阅读:
    百度云如何免费扩容至2055G?
    OKR学习总结
    layui和bootstrap 对比
    使用马克飞象+印象笔记 如何简单便捷地发表博客?
    Sublime使用记录之SublimeServer插件介绍
    12.RcolorBrewer包
    11.R语言流程
    25.conda 下载安装与运用
    7、purge_haplogs 基因组去冗余
    5.MCScanX 与circos下载、安装、运用
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538208.html
Copyright © 2011-2022 走看看