基于C++的顺序表的实现
顺序表,是数据结构中按顺序方式存储的线性表,又称向量。具有方便检索的特点。以下,是笔者学习是基于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++的顺序表的实现的更多相关文章
- C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现
前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...
- "《算法导论》之‘线性表’":基于动态分配的数组的顺序表
我们利用静态分配的数组来实现的顺序表的局限还是挺大的,主要在于它的容量是预先定好的,用户不能根据自己的需要来改变.如果为了后续用户能够自己调整顺序表的大小,动态地分配数组空间还是很有必要的.基于动态分 ...
- "《算法导论》之‘线性表’":基于静态分配的数组的顺序表
首先,我们来搞明白几个概念吧(参考自网站数据结构及百度百科). 线性表 线性表是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外, ...
- C++基于模板顺序表的实现(带排序)
说明:代码是可以运行的,但是发表在博客上后复制到编译器里面报N多错误,找了半天原因是网页里面生成了一些空白字符,这些字符编译器无法识别. 因此使用了2种插入格式插入代码. 第二个带注释解释的代码不可复 ...
- [数据结构]C#基于数组实现泛型顺序表
前方预警,只完成了顺序表的插入/删除/查找. 错误代码示例: /// <summary> /// 查找顺序表第i个位置的元素 /// 在显示情况中,我们更常用下标 /// </sum ...
- 前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于c语言)
0.对于顺序表中的n个元素,如果在下标i的位置之前插入一个元素,则需要将后面n-i个元素向后移动一位:如果是删除下标为i处的元素,则是则需要将后面n-i-1个元素向前移动一位.如果说在i的位置插入和删 ...
- 顺序表的插入和删除(基于c语言)
插入:在下标p处插入数据x:返回是否成功(0/1) 几个注意点:1.还能否插入数据:2.给的下标p是否是错误的以及p的范围:3.移动时的易错点(从下标大的元素开始):4.n与palist->n; ...
- 空顺序表的实现(基于c语言)
书中对于创建一个空线性表的定义如下: struct SeqList{ int MAXNUM; // 顺序表中最大元素的个数(也就是最多多少个元素),(其实MAXNUM也可以定义在外面) int n; ...
- 基于jQuery的Validate表单验证
表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~ 而我工作中用到最多的就是基于基于jQuery的Validate表单验证~ 就向下面这样~ 因为今天有个朋 ...
随机推荐
- Python基础之字符串
字符串内置处理函数 1.capitalize() 描述: 将字符串的第一个字母变成大写,其他字母变小写. 示例: a= "hello world" print (a.capital ...
- wpf 寻找某个控件下的子控件
/// <summary> /// 寻找某个控件下的子控件 /// </summary> /// <typeparam name="ChildType" ...
- MySQL新增用户以及数据库访问授权
# mysql -u root -p # 允许本地 IP 访问 localhost, 127.0.0.1 # insert into mysql.user(Host,User,Password) va ...
- SQL 分组排序、CASE...WHEN...、是否为空 查询
select Id,CustomerCode,CustomerName,CreateId,CreateName,Phone,StatusName,(case when phone is not nu ...
- EFI安装Win7
安装系统之前电脑里最好没有其他系统,安装过程中电脑需重启多次,其他系统会引导电脑开机,无法完成WIN7安装. 一.制作安装分区 1.首先在移动硬盘(U盘)准备一个FAT32分区 一定要FAT32分区, ...
- python 如何读取大文件
一般的读取文件的方法: with open(file_path, "r") as f: print f.read() 或者 with open(file_path,"r& ...
- 7. Shell 函数
1. 格式 [ function ] funname [()] { action; [return int;] } 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数 ...
- My97DatePicker -- 一个功能丰富, 而且兼容 ie 6, 7的日期选择组件
easyUI 也提供了 功能强大的日期组件, 可惜在ie 6,7,8下会报错,没有找到 addEventListener , JSON, 可能现在不想再支持低版本ie了 另外avalon也提供了 日 ...
- 郑州尚学堂:如何看待ARM的各种模式?
嵌入式设备已经越来越与我们的日常生活密切相关了,由此带来了ARM的高速发展.就拿我们的手机来说吧,几乎所有的手机都是ARM体系的.这里大致介绍下ARM 的7种执行模式. ARMv4以上版本的CPU任何 ...
- push类型消息中间件-消息订阅者(一)
1.订阅者的声明方式 我们以spring组件化的方式,声明一个消息订阅者,对于消息订阅者关心的主要有: topic: 一级消息类型(又名消息主题).如TRADE 消息类型:二级消息类型,区别同一Top ...