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

}

C++数据结构和算法每天一练(线性表)的更多相关文章

  1. Java数据结构和算法(一)线性结构之单链表

    Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...

  2. Java数据结构和算法(一)线性结构

    Java数据结构和算法(一)线性结构 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 线性表 是一种逻辑结构,相同数据类型的 ...

  3. "《算法导论》之‘线性表’":基于静态分配的数组的顺序表

    首先,我们来搞明白几个概念吧(参考自网站数据结构及百度百科). 线性表 线性表是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外, ...

  4. java数据结构和算法09(哈希表)

    树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常为O(logN),那有没有更快的数据结构?当然有,那就是哈希 ...

  5. HNCU1324:算法2-2:有序线性表的有序合并(线性表)

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1324 题目描述 已知线性表 LA 和 L ...

  6. 数据结构与算法【Java】02---链表

    前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...

  7. [PTA] 数据结构与算法题目集 6-2 顺序表操作集

    //创建并返回一个空的线性表: List MakeEmpty() { List L; L = (List)malloc(sizeof(struct LNode)); L->Last = -1; ...

  8. Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 存储键值对我们首先想到HashMap,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞,它是线程不安全的,并且存储的key只能有一个为 ...

  9. "《算法导论》之‘线性表’":基于数组实现的单链表

    对于单链表,我们大多时候会用指针来实现(可参考基于指针实现的单链表).现在我们就来看看怎么用数组来实现单链表. 1. 定义单链表中结点的数据结构 typedef int ElementType; cl ...

随机推荐

  1. uva 11922 - Permutation Transformer

    splay的题: 学习白书上和网上的代码敲的: #include <cstdio> #include <cstring> #include <cstdlib> #i ...

  2. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

  3. 以面到点的学习MFC

    市面上讲解学习MFC的书籍不胜其多,但是阅读的同学呢,看了一些内容以后,就无法阅读下去了,觉得MFC好难,有的呢,就会直接去看别人写的程序,不管是大或小,有时候也能明白一点点,但是总是走不出自己开发设 ...

  4. Eclipse中如何恢复已删除文件

    [转自] http://zhangjunhd.blog.51cto.com/113473/23092

  5. 【HDOJ】3726 Graph and Queries

    Treap的基础题目,Treap是个挺不错的数据结构. /* */ #include <iostream> #include <string> #include <map ...

  6. Why Creating a Meaningful Morning Routine Will Make You More Successful

    https://medium.com/life-learning/how-creating-a-meaningful-morning-routine-will-make-you-more-succes ...

  7. List<object>排序 z

    一般我們在撰寫程式時,很常會使用到List<>來裝取自定義的類別陣列,跟一般的陣列插在哪呢?!好處是什麼?!好處就是一般的陣列需要先 宣告長度,而List<>不用,所以在資料個 ...

  8. Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!

    Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...

  9. [Entity Framework]获取部分字段的查询

    using (var ObjectContext = new AgentSystemEntities()) { DateTime dt = new DateTime(1997, 1, 1); stri ...

  10. VS2015连接Oracle数据库(转)

    原文地址:https://xuanwo.org/2016/01/03/vs-oracle-11g 开发环境 宿主机:Win10 + VS2015 + ODP.Net for VS2015虚拟机:Win ...