基于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表单验证~ 就向下面这样~ 因为今天有个朋 ...
随机推荐
- 关于eclipse中代码与SVN服务器关联问题
今天开始开发新项目,此项目采用maven搭建,分多个工程,用eclipse的SVN插件检出工程之后只有一个工程,只好用桌面端的SVN工具检出,然后再import导入到eclipse中直接变成了多个工程 ...
- openstack私有云布署实践【17 配置文件部份说明】
Nova部份 cpu_allocation_ratio = 4.0 物理 CPU 超售比例,默认是 16 倍,超线程也算作一个物理 CPU,需要根据具体负载和物理 CPU 能力进行综合判断后确定具体的 ...
- Dom编程(一)
dom:document object model 文档对象模型 1.事件 body 事件:onload onunload onbeforeunload body.document对象的事件 (1)o ...
- HTML5扩展之微数据与丰富网页摘要itemscope, itemtype, itemprop
HTML5扩展之微数据与丰富网页摘要 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpr ...
- html5 -----audio标签
在现在的公司上班需要做一个html5页面,上下可以滑动的,在页面上需要音乐,默认开始音乐播放,点击音乐标签后音乐停止.后来在项目开发中,遇到性能优化的问题,所以我建议大家以后在使用时不要直接在页面中使 ...
- C# 语言规范_版本5.0 (第17章 特性)
1. 特性 C# 语言的一个重要特征是使程序员能够为程序中定义的实体指定声明性信息.例如,类中方法的可访问性是通过使用 method-modifiers(public.protected.intern ...
- android自定义控件,其三个父类构造方法有什么区别
android自定义控件时,通常需要重写父类构造函数.这三个够找函数具体啥时调用? public View (Context context) 是在java代码创建视图的时候被调用,如果是从xml填充 ...
- bison实例
逆波兰记号计算器[文件名rpcalc.y]%{ #define YYSTYPE double #include <stdio.h> #include <math.h> #inc ...
- 在线预览pdf、xlsx、docx、ppt等文档
使用微软提供的Office Online平台只需要一个网址即可在线查看Xls,doc,PPT等文档 http://view.officeapps.live.com/op/view.aspx?src=要 ...
- 使用mybatis多表联查的时候结果异常及springmvc的理解
今天使用mybatis多表联查的时候,在dos窗口查询时可以出结果集,但是使用mybatis查询的时候最后返回的结果只有最后一个结果 然后研究了半天没弄出来,后来无意中发现添加了最外层从表的ID字段后 ...