源文件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