⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seqlist.h

📁 可以用来计算大数的阶乘
💻 H
字号:
#include "LinearList.h"
enum ResultCode{UnderFlow,OverFlow,Success,Duplicate,NotPresent};
template <class T>
class SeqList:public LinearList<T>
{ 
public:
   SeqList(int mSize);
   ~SeqList() {delete []elements;}
   bool Insert(T x);
   void Output(ostream& out)const ; 
   bool Update(int i,T x);
   bool Find(int i,T &x)const;
   int Search(T x)const;
   void Reverse();
   void DeleteX(const T &x);
   ResultCode Search1(T x)const;

private:
   int maxLength;	//顺序表的最大长度
   T *elements;	//动态一维数组的指针
};
 
template <class T>
SeqList<T>::SeqList(int mSize)
{ 
   maxLength=mSize;
   elements=new T[maxLength];	//动态分配顺序表的存储空间
   n=0;
}
 
template<class T>
bool SeqList<T>::Insert(T x)         //更改的插入函数
{  
    if (n== maxLength)                    //判断n是否与maxLength相等
	{                               
		T *a;    //新建数组
		a=new T[maxLength];        
		for(int j=0;j<maxLength;j++ )  //将elements中数值都拷贝到a中
			a[j]=elements[j];
		maxLength=2*maxLength;         //将最大容量翻倍
		delete []elements;             //删除原来的elements数组
		elements=new T[maxLength];     //重新建立新的elements数组
		for(j=0;j<maxLength/2;j++)
			elements[j]=a[j];          //复制原来的数值至新的elements中
		delete []a;                    //删除a 
    } 
	elements[n]=x;                                  
    n++;       //     Output(cout);
	return true;
	
}

template <class T>
void SeqList<T>::Output(ostream& out)const
{
    for (int i=0;i<n;i++) 
	{    
		out<<elements[i];
		if((i+1)%60==0)
            out<<endl;
	}
	out<<endl;
}
   
template<class T>
bool SeqList<T>::Update(int i,T x)
{
	if(i>=n || i<-1) return false;
	else 
	{
		elements[i]=x;
		return true;
	}
}

template<class T>
bool SeqList<T>::Find(int i,T &x)const
{
	if(i<-1 || i>=n)
		return false;
	else
	{
		x=elements[i];return true;
	}
}

template<class T>
int SeqList<T>::Search(T x)const
{
	for(int i=0;i<n;i++)
		if(elements[i]==x)
			return i;
	return -1;
}

template<class T>
void SeqList<T>::Reverse()              //顺序表逆置
{
	T a;
	for(int i=0;i<n/2;i++)
	{
		a=elements[i];
		elements[i]=elements[n-i-1];
		elements[n-i-1]=a;
	}
}

template<class T>
void SeqList<T>::DeleteX(const T &x)      //删除x
{
	for(int i=0;i<n;i++)
		if(elements[i]==x)
		{
			for(int j=i;j<n-1;j++)
			{    
				elements[j]=elements[j+1];
			}
			elements[n]=NULL;
			n--;
		}
}

template<class T>
ResultCode SeqList<T>::Search1(T x)const     //搜索元素
{
	for(int i=0;i<n;i++)
		if(elements[i]==x)
			return Success;
    return NotPresent;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -