顺序表 C++模板实现
#include <iostream>
using namespace std; template <typename T>
class list{
private:
int maxLen; //顺序表能允许的最大长度
int num; //当前表中的元素个数
T *data; //保存T类型数组首地址
public:
list(int max); //构造函数
~list(); //析构函数
void add(const T x); //在最后一个元素后增加一个元素x
void insert(int i , T x); //在下标为i的元素处增加一个元素x
void dele(int i); //删除下标为i的元素
void set(int i, T x); //设置下标为i的元素的值
int locate(T x); //查找第一个与x相同元素的下标
T get(int i); //返回下标为i的元素
void printAll(); //打印整个顺序表
}; //构造函数实现
template <typename T>
list<T>::list(int max){
maxLen = max; //顺序表最大长度
data = new T[maxLen]; //动态数组
num=0;
} //析构函数实现
template <typename T>
list<T>::~list(){
delete [] data; //释放动态数组
} //在最后一个元素后增加一个元素x,实现部分
template <typename T>
void list<T>::add(T x){
data[num]= x;
num++;
} //在下标为i的元素处增加一个元素x,实现部分
template <typename T>
void list<T>::insert(int i ,T x){
if(i<0 && i>num-1){ //判断插入位置是否介于下标0与num-1之间
cerr<<"插入位置有误"<<endl;
exit(1);
}
else if(num == maxLen){ //判断表是否满了
cerr<<"顺序表已满,无法插入" <<endl;
exit(1);
}
int j = num;
while(j>i){
data[j] = data[j-1];
j--;
}
data[i] = x;
num++;
} //删除下标为i的元素,实现部分
template <typename T>
void list<T>::dele(int i){
if(i<0 && i>num-1){ //判断删除位置是否介于下标0与num-1之间
cerr<<"删除位置有误"<<endl;
exit(1);
}
int j = i+1;
while(j<num){
data[j-1] = data[j];
j++;
}
num--;
} //设置下标为i的元素的值,实现部分
template <typename T>
void list<T>::set(int i , T x){
data[i] = x;
} //查找第一个与x相同元素的下标,实现部分
template <typename T>
int list<T>::locate(T x) {
for(int i = 0 ; i < num ; i++){
if(data[i] == x)
return i;
}
return -1;
} //返回下标为i的元素,实现部分
template <typename T>
T list<T>::get(int i){
return data[i];
} //打印整个顺序表,实现部分
template <typename T>
void list<T>::printAll(){
for(int i = 0 ; i <num ; i++){
cout<<data[i]<<endl;
}
}
void main(){
list<int> a(10); //创建元素类型为int,最大长度为10的顺序表
a.add(1); //增加一个元素,元素值为1
a.add(2); //增加一个元素,元素值为2
a.add(3); //增加一个元素,元素值为3
a.add(4); //增加一个元素,元素值为4
a.add(5); //增加一个元素,元素值为5
a.insert(4,0); //在下表为4的元素,插入一个值为0的元素
a.dele(4); //删除上次插入的元素
a.set(0,9); //设置下标为0的元素的值为9
a.printAll(); //打印所有元素的值
}
顺序表 C++模板实现的更多相关文章
- C++顺序表(模板总结)
C++顺序表(模板总结) 总结: 1.模板类的实质是什么:让程序员写出和类型无关的代码 2.模板的对象时什么:方法或者类 3.是对类中的一系列操作,提供一个不固定数据类型的方法 用模板做的类的时候要指 ...
- 数据结构:DHU顺序表ADT模板设计及简单应用:找匹配
顺序表ADT模板设计及简单应用:找匹配 时间限制: 1S类别: DS:线性表->线性表应用 问题描述: 输入范例: 100000100000 99999 99998 99997 99996 99 ...
- C++利用动态数组实现顺序表(不限数据类型)
通过类模板实现顺序表时,若进行比较和遍历操作,模板元素可以通过STL中的equal_to仿函数实现,或者通过回调函数实现.若进行复制操作,可以采用STL的算法函数,也可以通过操作地址实现.关于回调函数 ...
- C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现
前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- C++基于模板顺序表的实现(带排序)
说明:代码是可以运行的,但是发表在博客上后复制到编译器里面报N多错误,找了半天原因是网页里面生成了一些空白字符,这些字符编译器无法识别. 因此使用了2种插入格式插入代码. 第二个带注释解释的代码不可复 ...
- 顺序表 C++ 类模板实现
顺序表的C++语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立顺序表.输出顺序表 #include <iostream>using namespa ...
- c++顺序表基本功能
头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...
- 顺序表及其多种实现方式 --- C/C++
所谓顺序表,即线性表的顺序存储结构.下面给出的是数据结构---线性表的定义. ADT List{ 数据对象: 线性表的数据对象的集合为{a1,a2,a3,...,an},每个元素的类型为ElemTyp ...
随机推荐
- iOS- iPad UIPopoverController
在IPAD开发中,有一个很有趣的视图控制器,UIPopoverControllr,它的初始化必须要设置一个"内容视图",相当于它本身只是作为一个“容器”,而显示的内容还需要另外一个 ...
- 【转】数据库中的join
转自:http://coolshell.cn/articles/3463.html 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有 ...
- HDU 1718 Rank counting sort解法
本题是利用counting sort的思想去解题. 注意本题,好像利用直接排序,然后查找rank是会直接被判WA的.奇怪的推断系统. 由于分数值的范围是0到100,很小,而student 号码又很大, ...
- Oracle用户及角色的权限管理[Oracle基础]
1.查看全部用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角 ...
- 【54】让自己熟悉包括TR1在内的标准程序库
1.C++0X,不确定哪一年出来,意指200X版的C++ 2.C++标准程序库的主要机能有:STL,iostreams,locals等. 3.TR1:Technical Report 1,只是一份规范 ...
- iOS开发——数据持久化Swift篇&iCloud云存储
iCloud云存储 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super. ...
- error “base class has incomplete type”
error "base class has incomplete type" 如果base.h是你的基类,那么在子类derive中,写成如下形式: class base; clas ...
- C#解决微信支付Exception has been thrown by the target of an invocation(调用的目标发生了异常)的问题
今天搭建微信扫码支付环境的时候,一样的配置参数,调用连接提示错误 错误:调用的目标发生了异常 然后跟踪到执行 MD5 md5 = System.Security.Cryptography.MD5.Cr ...
- 去model化开发
前言 去model化是一种框架设计上的做法,其中的model并不是指架构中的model层,套用Casa大神博客中的原文就是: model化就是使用数据对象,去model化就是不使用数据对象. 常见的去 ...
- Google(谷歌)中国工程研究院 工程师 方坤 对学生朋友的一些建议
对学生朋友的一点建议 发表者:Google(谷歌)中国工程研究院工程师 方坤 自去年春天加入谷歌,我曾多次随公司校园招聘团队一起走访各地院校,帮助公司发掘人才 .利用这样的出差机会到处走走看看,饱览祖 ...