顺序表,是数据结构中按顺序方式存储的线性表,又称向量。具有方便检索的特点。以下,是笔者学习是基于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. .net c#通过Exif获取图片信息(参数)

    简介 想要获取图片的信息,例如快门速度.ISO值等等,我们可以通过读取Exif中存储的信息.Exif(Exchangeable Image File)是存储在JPEG格式照片头部的一段信息,相机和手机 ...

  2. do{...}while(0)的意义和用法(转载)

    linux内核和其他一些开源的代码中,经常会遇到这样的代码: do{ ... }while(0) 这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢? 实 ...

  3. hdu 3507 Print Article(斜率优化DP)

    题目链接:hdu 3507 Print Article 题意: 每个字有一个值,现在让你分成k段打印,每段打印需要消耗的值用那个公式计算,现在让你求最小值 题解: 设dp[i]表示前i个字符需要消耗的 ...

  4. 学习笔记:shell 中 [-eq] [-ne] [-gt] [-lt] [ge] [le]

    -eq           //等于 -ne           //不等于 -gt            //大于 (greater ) -lt            //小于  (less) -g ...

  5. select空间提交form表单传递参数

    如下, 到了 <form name="modelForm" action="/portal/defectinfo/toDefectPage?projectname= ...

  6. mx51的三个framebuffer,mxc_ipuv3_fb.c分析

    转载:http://blog.csdn.net/jack_a8/article/details/43309169 mx51支持三个framebuffer:fb0, fb1, fb2 /dev/grap ...

  7. SQL LIKE语句多条件贪婪匹配算法

    在CMS开发中,经常会有类似这样的需求: 提问——回答模式,最经典的例子就是百度提问. 提问者提出问题,由其他人回答,其他人可以是用户,也可以是服务商. 在这个模式中,如何充分利用历史数据是最关键的技 ...

  8. OAuth2.0 工作流程

    重要术语   Authorization Server:授权服务器,能够成功验证资源拥有者和获取授权,并在此之后分发令牌的服务器: Resource Server:资源服务器,存储用户的数据资源,能够 ...

  9. vim全局替换命令

    vim全局替换命令   语法为 :[addr]s/源字符串/目的字符串/[option]全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行.如:“1,20” ...

  10. javaWEB总结(15):jsp指令_page指令

    jsp指令 jsp指令是为jsp引擎设计的.他们并不直接产生任何可见输出,而只是告诉引擎如何处理jsp页面的其余部分. 目前定义了page,include和taglib这三种指令. page指令 (1 ...