顺序表,是数据结构中按顺序方式存储的线性表,又称向量。具有方便检索的特点。以下,是笔者学习是基于C++实现的顺序表代码,贴上来当网页笔记用。

#include <iostream>
using namespace std;
template <class T>
class List{
void clear();//释放顺序表
bool isEmpty();//判断顺序表是否为空
bool append(const T value);//在顺序表后添加value值
bool insert(const int p,const T value);//在p位置插入value值
bool del(const int p);//删除在p位置的值
bool getValue(const int p,T& value);//将p位置的值赋予value
bool setValue(const int p,const T value);//将p位置的值设置为value
bool getPos(int &p,const T value);//将值为value的位置赋予p
};
template <class T>
class arrList:public List<T> {
private:
T *aList; //存储顺序表的实例
int maxSize;//顺序表的最大值
int curLen;//顺序表的实际长度
int position;//顺序表的当前处理位置
public:
arrList(const int size){//初始化顺序表
maxSize=size;
aList=new T[maxSize];
curLen=position=0;
} ~arrList(){//消除表实例
delete [] aList;
}
void clear(){//清空顺序表,成为空表
delete [] aList;
curLen=position=0;
aList=new T[maxSize];
}
bool isEmpty(){
/*判断顺序表是否为空
若curLen为空,即当前实际长度为空,即为空表
*/
if(curLen==0){
return true;
}else{
return false;
}
}
int length(){
//返回顺序表的当前长度
return curLen;
}
bool append(const T value){
/*
在顺序表末插入value
实际长度+1
*/
aList[curLen]=value;
curLen++;
}
bool insert(const int p,const T value){
int i;
if(curLen>=maxSize){
/*判断顺序表是否已满*/
cout<<"The list is overflow"<<endl;
return false;
}
if(p<0||p>curLen){
/*判断请求合理性*/
cout<<"Insertion point is illegal"<<endl;
return false; }
for(i=curLen;i>p;i--){
/*将p后的数据后移*/
aList[i]=aList[i-1]; }
/*将值置于p,curLen位置加1*/
aList[p]=value;
curLen++;
return true;
}
bool del(const int p){
int i;
/*判断当前表是否为空,为空不删除*/
if(curLen<=0){
cout<<"No element to del"<<endl;
return false;
}
/*判断请求合理性*/
if(p<0||p>curLen-1){
cout<<"deletion is illegal"<<endl;
return false;
}
/*将位置p后的值前移,覆盖*/
for(i=p;i<curLen-1;i++){
aList[i]=aList[i+1]; }
curLen--;
return true;
}
bool getValue(const int p,T& value){
//判断请求合理性
if(p<0||p>curLen-1){
cout<<"No such element"<<endl;
return false;
}
value=aList[p];
}
bool setValue(const int p,const T value){
//判断请求合理性
if(p<0||p>curLen-1){
cout<<"No such element"<<endl;
return false;
}
aList[p]=value;
}
bool getPos(int &p,const T value){
int i;
for(i=0;i<curLen;i++){
if(value==aList[i]){
p=i;
return true;
}
return false;
}
}
};

基于C++的顺序表的实现的更多相关文章

  1. C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

    前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...

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

    我们利用静态分配的数组来实现的顺序表的局限还是挺大的,主要在于它的容量是预先定好的,用户不能根据自己的需要来改变.如果为了后续用户能够自己调整顺序表的大小,动态地分配数组空间还是很有必要的.基于动态分 ...

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

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

  4. C++基于模板顺序表的实现(带排序)

    说明:代码是可以运行的,但是发表在博客上后复制到编译器里面报N多错误,找了半天原因是网页里面生成了一些空白字符,这些字符编译器无法识别. 因此使用了2种插入格式插入代码. 第二个带注释解释的代码不可复 ...

  5. [数据结构]C#基于数组实现泛型顺序表

    前方预警,只完成了顺序表的插入/删除/查找. 错误代码示例: /// <summary> /// 查找顺序表第i个位置的元素 /// 在显示情况中,我们更常用下标 /// </sum ...

  6. 前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于c语言)

    0.对于顺序表中的n个元素,如果在下标i的位置之前插入一个元素,则需要将后面n-i个元素向后移动一位:如果是删除下标为i处的元素,则是则需要将后面n-i-1个元素向前移动一位.如果说在i的位置插入和删 ...

  7. 顺序表的插入和删除(基于c语言)

    插入:在下标p处插入数据x:返回是否成功(0/1) 几个注意点:1.还能否插入数据:2.给的下标p是否是错误的以及p的范围:3.移动时的易错点(从下标大的元素开始):4.n与palist->n; ...

  8. 空顺序表的实现(基于c语言)

    书中对于创建一个空线性表的定义如下: struct SeqList{ int MAXNUM; // 顺序表中最大元素的个数(也就是最多多少个元素),(其实MAXNUM也可以定义在外面) int n; ...

  9. 基于jQuery的Validate表单验证

    表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~  而我工作中用到最多的就是基于基于jQuery的Validate表单验证~  就向下面这样~ 因为今天有个朋 ...

随机推荐

  1. centos6.5 安装python3.5

    1.CentOS6.5 安装Python 的依赖包 yum groupinstall "Development tools" yum install zlib-devel bzip ...

  2. ios开发之滑动长图截全屏应用

    最近做项目遇到要求截取图片长度超出手机屏幕,即可滑动的长图截屏,这里简单说一下解决思路,下面附带Demo下载地址. ,当我们要截全屏时,将滑动视图的frame以及偏移量记录下来,然后将滑动视图偏移量设 ...

  3. Jquery 操作DropDownList 根据条件选中

    $("#<%=DDLCounty.ClientID%> option").each(function () { if ($(this).text() == $(&quo ...

  4. 关于高性能javascript 笔记

    最近买了本新书,准备自己吃 狗粮的同时也吃点精神食粮.笔记总结,从现在开始,看我啥时候能看完这本酥,就酱紫, begin:

  5. CSS样式类型

    CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌入式和外部式三种.这一小节先来讲解内联式 (一)内联式样式 内联式css样式表就是把css代码直接写在现有 ...

  6. Pass和ClassPath变量配置

    1.pass环境变量配置的是可执行性文件bin目录,是为了在任意盘符下都可以运行javac.exe和java.exe所配置的. 2.classpath环境变量记录的是java类运行文件所在的目录,一般 ...

  7. Mysql的转义字符

    Mysql的转义字符是"\",即反斜杠,在INSERT语句中,如果被插入的文本中包含反斜杠,那么反斜杠会被吃掉.例如: INSERT INTO tb (id,json) VALUE ...

  8. js实现多行文本超出一定字数显示省略号功能

    最近项目中遇到了一个关于超出一定字数用省略号显示的问题,其实这种形式很常见,公司简介.产品介绍啊里面都可能会用到,一行文字显示省略号很容易,多行就得想点办法了.在经过查阅.整理之后,我也算是实现了这个 ...

  9. STM32F103的11个定时器详解(转)

    源:STM32F103的11个定时器详解 STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器4个普通定时器2个基本定时器2个看门狗定时器1个系统嘀嗒定时器 出去看门狗定时器和系统滴 ...

  10. 雄冠条码PV系统-2016-05-17-收获

    Q1:微信浏览器 input获取焦点时,页面宽度变大 解决方法: HTML <header> 中添加<meta name="viewport" content=& ...