C++数据结构和算法每天一练(线性表)

简介: #include using namespace std;  class  ArrayLinerTable { public:       void InitLinerTable(int); //初始化线性表  void MakeEmpty() ;//清空线性表     ...

#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;
}

目录
相关文章
|
4天前
|
存储 算法 调度
算法与数据结构-栈篇
算法与数据结构-栈篇
11 0
|
4天前
|
存储 设计模式 算法
数据结构,算法宏观印象构建
数据结构,算法宏观印象构建
|
5天前
|
人工智能 算法
程序技术好文:算法与数据结构
程序技术好文:算法与数据结构
|
5天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之选择排序
Java数据结构与算法:排序算法之选择排序
|
5天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之冒泡排序
Java数据结构与算法:排序算法之冒泡排序
|
5天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之归并排序
Java数据结构与算法:排序算法之归并排序
|
5天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之插入排序
Java数据结构与算法:排序算法之插入排序
|
1天前
|
算法 索引
基于Prony算法的系统参数辨识matlab仿真
Prony算法在MATLAB2022a中用于信号分析,识别复指数信号成分。核心程序通过模拟信号X1,添加不同SNR的噪声,应用Prony方法处理并计算误差。算法基于离散序列的复指数叠加模型,通过构建矩阵并解线性方程组估计参数,实现LTI系统动态特性的辨识。
|
2天前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。
|
2天前
|
算法
基于PSO粒子群优化的PID控制器参数整定算法matlab仿真
该文探讨了使用PSO(粒子群优化)算法优化PID控制器参数的方法。通过PSO迭代,不断调整PID控制器的Kp、Ki、Kd增益,以减小控制误差。文中提供了MATLAB2022a版本的核心代码,展示了参数优化过程及结果。系统仿真图像显示了参数随迭代优化的变化。PID控制器结合PSO算法能有效提升控制性能,适用于复杂系统的参数整定,未来研究可关注算法效率提升和应对不确定性。