C++数据结构和算法每天一练(线性表)
#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++数据结构和算法每天一练(线性表)的更多相关文章
- Java数据结构和算法(一)线性结构之单链表
Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...
- Java数据结构和算法(一)线性结构
Java数据结构和算法(一)线性结构 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 线性表 是一种逻辑结构,相同数据类型的 ...
- "《算法导论》之‘线性表’":基于静态分配的数组的顺序表
首先,我们来搞明白几个概念吧(参考自网站数据结构及百度百科). 线性表 线性表是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外, ...
- java数据结构和算法09(哈希表)
树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常为O(logN),那有没有更快的数据结构?当然有,那就是哈希 ...
- HNCU1324:算法2-2:有序线性表的有序合并(线性表)
http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1324 题目描述 已知线性表 LA 和 L ...
- 数据结构与算法【Java】02---链表
前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...
- [PTA] 数据结构与算法题目集 6-2 顺序表操作集
//创建并返回一个空的线性表: List MakeEmpty() { List L; L = (List)malloc(sizeof(struct LNode)); L->Last = -1; ...
- Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 存储键值对我们首先想到HashMap,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞,它是线程不安全的,并且存储的key只能有一个为 ...
- "《算法导论》之‘线性表’":基于数组实现的单链表
对于单链表,我们大多时候会用指针来实现(可参考基于指针实现的单链表).现在我们就来看看怎么用数组来实现单链表. 1. 定义单链表中结点的数据结构 typedef int ElementType; cl ...
随机推荐
- bzoj 3065: 带插入区间K小值 替罪羊树 && AC300
3065: 带插入区间K小值 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1062 Solved: 253[Submit][Status] Des ...
- [转贴]实践:C++平台迁移以及如何用C#做C++包装层
终于有个C++ 如何调用C#类库的文章,收藏之 在前面,我们看过OpenTK与MOgre,这二个项目都是C#项目,但是他的实现都是C++.他们简单来说就是一个包装层.常见的包装方式有二种,一 种就是我 ...
- HttpResponseCache 网络缓存使用
Caches HTTP and HTTPS responses to the filesystem so they may be reused, saving time and bandwidth. ...
- SpringMVC源码解析 - HandlerMethod
HandlerMethod及子类主要用于封装方法调用相关信息,子类还提供调用,参数准备和返回值处理的职责. 分析下各个类的职责吧(顺便做分析目录): HandlerMethod 封装方法定义相关的信息 ...
- 【HDOJ】2546 饭卡
01背包,需要先对数据升序排序.这样保证优先购买最贵的东西,才满足背包条件. #include <stdio.h> #include <string.h> #include & ...
- Colour your Log4Net events in your RichTextBox zz
You’re most probably here because you have already read my article How to watch your log through you ...
- [转]NHibernate之旅(7):初探NHibernate中的并发控制
本节内容 什么是并发控制? 悲观并发控制(Pessimistic Concurrency) 乐观并发控制(Optimistic Concurrency) NHibernate支持乐观并发控制 实例分析 ...
- AutoItLibrary
问题: [ ERROR ] Error in file 'E:\test\test_AutoItLibrary.txt': Initializing test library 'AutoItLibra ...
- Linux内核学习笔记3——分段机制和分页机制
一 分段机制 1.什么是分段机制 分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元. 2.什么是段 每个段由三个参数定义:段基地址.段限长和段属性. 段的基地址.段限长以及 ...
- Linux内核学习笔记1——系统调用原理【转】
1什么是系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口.用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文 ...