#include <iostream>
using namespace std;
class ArrayLinerTable
{
public:
void InitLinerTable(int); //初始化線性表
void MakeEmpty() ;//清空線性表
int GetLength() ;//獲取長度
int Locate(int) ;//獲取制定位置的數據
ArrayLinerTable* Insert(int,int) ;//在制定位置插入一個元素
ArrayLinerTable* AppendTo(int) ;//追加
ArrayLinerTable* PrintLinerTable() ;//打印線性表
ArrayLinerTable* Delete(int) ;//刪除指定位置
ArrayLinerTable* Update(int,int) ;//修改元素
bool IsEmpty() ;//是否空
ArrayLinerTable*ClearAllData() ;//清除所有元素
ArrayLinerTable*SortAsc() ;//升序
ArrayLinerTable*SortDesc();//降序
ArrayLinerTable(); //構造
~ArrayLinerTable();//析構
private:
int *pLinerTableHeader ; //表頭
int length ;//
int maxIndex ;//當前最大數量
};
ArrayLinerTable::ArrayLinerTable()
{
this->maxIndex= -1; //剛開始不存在-1
pLinerTableHeader=NULL ;
}
void ArrayLinerTable::InitLinerTable(int length)//不能使用模版成員指針 因為在編譯期間無法確定類型所以是錯誤的
{
this->pLinerTableHeader=new int[length] ;
this->length=length ;
}
void ArrayLinerTable::MakeEmpty()
{
delete this->pLinerTableHeader ;
this->pLinerTableHeader=NULL ;
}
int ArrayLinerTable::GetLength()
{
return this->length ;
}
int ArrayLinerTable::Locate(int i)
{
if(-1==maxIndex)
{
cout<<"表內沒有數據!"<<endl ;
return 0;
}
if (i>maxIndex)
{
cout<<"超出最大長度"<<endl ;
return 0;
}
return pLinerTableHeader[i] ;
}
ArrayLinerTable* ArrayLinerTable::Insert(int position,int data)
{
if(pLinerTableHeader==NULL)
{
InitLinerTable(100) ;//初始化
this->length=100 ;
this->maxIndex=0 ;
pLinerTableHeader[0]=data ;
return this ;
}
if(maxIndex>=length-1)
{
cout<<"線性表已滿!"<<endl ;
return this ;
}
if ((position>maxIndex+1||position==maxIndex+1)&&position<length) //尾部
{
pLinerTableHeader[maxIndex+1]=data ;
maxIndex++ ;
return this;
}
int x,y ;
for (int i=position;i<maxIndex;i++)
{
if(i==position) //第一次的叫喚
{
x=pLinerTableHeader[i+1] ;
pLinerTableHeader[i+1]=pLinerTableHeader[position] ;
continue;
}
y=pLinerTableHeader[i+1];
pLinerTableHeader[i+1]=x ;
x=y ;
}
pLinerTableHeader[maxIndex+1]=x;
pLinerTableHeader[position]=data ;
maxIndex++ ;
return this ;
}
ArrayLinerTable* ArrayLinerTable::AppendTo(int data)
{
if(pLinerTableHeader==NULL)
{
InitLinerTable(100) ;//初始化
this->length=100 ;
this->maxIndex=0 ;
pLinerTableHeader[0]=data ;
return this ;
}
if (maxIndex==length-1)
{
cout<<"表滿!"<<endl ;
return this;
}
pLinerTableHeader[maxIndex+1] =data ;
maxIndex++ ;
return this ;
}
ArrayLinerTable*ArrayLinerTable::PrintLinerTable()
{
if (maxIndex==-1)
{
cout<<"No Data"<<endl ;
}
for (int i=0;i<=maxIndex;i++)
{
cout<<"Position "<<i<< " Data: "<<this->Locate(i)<<endl ;
}
return this;
}
ArrayLinerTable* ArrayLinerTable::Delete(int position)
{
if(position>maxIndex){
cout<<"位置超過最大索引"<<endl ;
return this ;
}
if(position==maxIndex){ //尾部刪除
maxIndex-- ;
return this ;
}
for(int i=position;i<maxIndex;i++)
{
pLinerTableHeader[i]=pLinerTableHeader[i+1];
}
maxIndex--;
return this ;
}
bool ArrayLinerTable::IsEmpty()
{
return this->pLinerTableHeader==NULL?true:false ;
}
ArrayLinerTable*ArrayLinerTable::ClearAllData()
{
for (int i=0;i<maxIndex;i++)
{
pLinerTableHeader[i]=0 ;
}
maxIndex=-1 ;
return this ;
}
ArrayLinerTable* ArrayLinerTable::Update(int position,int data)
{
if(position>maxIndex){
cout<<"位置超過最大索引"<<endl ;
return this ;
}
pLinerTableHeader[position]=data ;
return this ;
}
ArrayLinerTable* ArrayLinerTable::SortAsc() //升序
{
for (int i=0;i<=maxIndex-1;i++)
{
for (int j=i+1;j<=maxIndex;j++)
{
if (pLinerTableHeader[i]>pLinerTableHeader[j])
{
pLinerTableHeader[i]=pLinerTableHeader[j]+pLinerTableHeader[i] ;
pLinerTableHeader[j]=pLinerTableHeader[i]-pLinerTableHeader[j] ;
pLinerTableHeader[i]=pLinerTableHeader[i]-pLinerTableHeader[j] ;
}
}
}
return this ;
}
ArrayLinerTable* ArrayLinerTable::SortDesc() //降序
{
for (int i=0;i<=maxIndex-1;i++)
{
for (int j=i+1;j<=maxIndex;j++)
{
if (pLinerTableHeader[i]<pLinerTableHeader[j])
{
pLinerTableHeader[i]=pLinerTableHeader[j]+pLinerTableHeader[i] ;
pLinerTableHeader[j]=pLinerTableHeader[i]-pLinerTableHeader[j] ;
pLinerTableHeader[i]=pLinerTableHeader[i]-pLinerTableHeader[j] ;
}
}
}
return this ;
}
ArrayLinerTable::~ArrayLinerTable()
{
if(pLinerTableHeader!=NULL)
delete this->pLinerTableHeader;
cout<<"對象釋放!"<<endl ;
}
#include <iostream>
#include "ArrayLinerTable.h"
using namespace std;
int main(int*argc,char **agrgv)
{
//cout<<__FILE__<<"---"<<__LINE__<<endl; 顯示行 文件
//預編譯指令用於防止某些代碼被編譯 通常被用作調試使用
#ifdef DEBUG
cout<<"開啟DEBUG模式!"<<endl ;
#endif
//system("COLOR C9") ;
ArrayLinerTable *linerTable=new ArrayLinerTable() ;
for(int i=0;i<10;i++)
linerTable->AppendTo(i) ;
linerTable->Insert(1,15) ;
linerTable->PrintLinerTable();
cout<<"--------升序排序---------"<<endl ;
linerTable->SortAsc()->PrintLinerTable() ;
cout<<"-------降序排序----------"<<endl ;
linerTable->SortDesc()->PrintLinerTable() ;
cout<<"-------清空數據----------"<<endl ;
linerTable->ClearAllData()->PrintLinerTable()->MakeEmpty();
delete linerTable ;
return 0;
}