C++操作顺序表

源文件main.cpp

#include <iostream>
#include "SeqList.h"

int main()
{
    double b[]= {1,4,6,2,9,11,1};
    SeqList<double> S;//创建对象
    S.SeqList0(b);
    cout<<"原始顺序表为:";
    S.PrintList();
    cout<<""<<endl;//换行

    S.Insert(5,7);//插入
    cout<<"在第5个位置插入7为:";
    S.PrintList();
    cout<<""<<endl;

    S.Delete(3);//删除
    cout<<"删除第3个位置元素为:";
    S.PrintList();
    cout<<""<<endl;

    cout<<"按位查找,查找第6个元素值为:"<<S.get(6)<<endl;
    cout<<"最大值为:"<<S.MAX()<<endl;
    S.Sort();//排序
    cout<<"从小到大排序为:";
    S.PrintList();
    return 0;
}

头文件SeqList.h

#ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED
using namespace std;
const int Maxsize=100;//顺序表最大长度
template <typename T>
struct SeqList
{
    void SeqList0(T a[]);//创建长度为n的顺序表
    int Length();
    T get(int i);//按位查找,查找第i个元素值
    T Find(T x);//按值查找,查找值为x的元素序号,返回-1代表未查找到
    void Insert(int i,T x);//插入操作,在第i个位置插入值为x的元素
    void Delete(int i);//删除操作,删除第i个元素
    void PrintList();//按序号依次输出各元素
    T MAX();//取表中最大的
    T MIN();//取表中最小的
    void Sort();//从小到大排序
private:
    T data[Maxsize];
    int length=0;
};

template <typename T>
void SeqList<T>::SeqList0(T a[])
{
    for(int i=0; i<Maxsize; i+=1)
    {
        if(a[i]<1e-300) break;//判断输入的值长度
        else length+=1;
    }
    if(length==Maxsize) cout<<"SeqList0():警告建议扩大表最大长度"<<endl;
    for(int i=0; i<length; i+=1)
    {
        data[i]=a[i];
    }
}

template <typename T>
int SeqList<T>::Length()
{
    return length;
}

template <typename T>
T SeqList<T>::get(int i)
{
    if (i<1||i>length) cout<<"get():超出表长度"<<endl;
    return data[i-1];
}

template <typename T>
T SeqList<T>::Find(T x)
{
    for(int i=0; i<length; i+=1)
    {
        if(data[i]==x)
        {
            return i+1;
            break;
        }
        else if(i==length-1)//最后一个循环完了都没有执行break,说明没查找到
        {
            return -1;
        }
    }
}

template <typename T>
void SeqList<T>::Insert(int i,T x)
{
    if(length==Maxsize) cout<<"Insert():溢出"<<endl;
    if(i<1||i>length+1) cout<<"Insert():插入位置错误"<<endl;
    for(int j=length-1; j>=i-1; j=j-1)
    {
        data[j+1]=data[j];//从最后的元素开始往后移,到要插入的地方停止
    }
    data[i-1]=x;
    length+=1;//更新表的长度
}

template <typename T>
void SeqList<T>::Delete(int i)
{
    if(i<1||i>length) cout<<"Delete():删除的位置不存在"<<endl;
    for(int j=i-1; j<length; j+=1)
    {
        data[j]=data[j+1];//删除之后,后面的数整体向前移
    }
    length-=1;
}

template <typename T>
void SeqList<T>::PrintList()
{
    for(int i=1; i<=length; i+=1)
    {
        cout<<get(i)<<" ";
    }
}

template <typename T>
T SeqList<T>::MAX()
{
    double z=data[0];
    for(int i=0; i<length; i+=1)
    {
        if(data[i]>z) z=data[i];
    }
    return z;
}

template <typename T>
T SeqList<T>::MIN()
{
    double z=data[0];
    for(int i=0; i<length; i+=1)
    {
        if(data[i]<z) z=data[i];
    }
    return z;
}

template <typename T>
void SeqList<T>::Sort()
{
    int a=999;//主要为了while能开始循环
    while(a!=0)
    {
        a=0;
        for(int i=0; i<length-1; i+=1)
        {
            if(data[i]>data[i+1])
            {
                double x=data[i];
                data[i]=data[i+1];
                data[i+1]=x;//冒泡排序
                a=a+1;//判断是否执行了if这个语句,没有执行则说明完成排序的,同时a值不会被改变恒为0,从而退出while循环
            }
        }
    }
}
#endif // SEQLIST_H_INCLUDED

运行结果:

原始顺序表为:1 4 6 2 9 11 1
在第5个位置插入7为:1 4 6 2 7 9 11 1
删除第3个位置元素为:1 4 2 7 9 11 1
按位查找,查找第6个元素值为:11
最大值为:11
从小到大排序为:1 1 2 4 7 9 11

猜你喜欢

转载自blog.csdn.net/m0_62526778/article/details/129427307