#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++模板实现的更多相关文章

  1. C++顺序表(模板总结)

    C++顺序表(模板总结) 总结: 1.模板类的实质是什么:让程序员写出和类型无关的代码 2.模板的对象时什么:方法或者类 3.是对类中的一系列操作,提供一个不固定数据类型的方法 用模板做的类的时候要指 ...

  2. 数据结构:DHU顺序表ADT模板设计及简单应用:找匹配

    顺序表ADT模板设计及简单应用:找匹配 时间限制: 1S类别: DS:线性表->线性表应用 问题描述: 输入范例: 100000100000 99999 99998 99997 99996 99 ...

  3. C++利用动态数组实现顺序表(不限数据类型)

    通过类模板实现顺序表时,若进行比较和遍历操作,模板元素可以通过STL中的equal_to仿函数实现,或者通过回调函数实现.若进行复制操作,可以采用STL的算法函数,也可以通过操作地址实现.关于回调函数 ...

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

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

  5. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

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

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

  7. 顺序表 C++ 类模板实现

    顺序表的C++语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立顺序表.输出顺序表 #include <iostream>using namespa ...

  8. c++顺序表基本功能

    头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...

  9. 顺序表及其多种实现方式 --- C/C++

    所谓顺序表,即线性表的顺序存储结构.下面给出的是数据结构---线性表的定义. ADT List{ 数据对象: 线性表的数据对象的集合为{a1,a2,a3,...,an},每个元素的类型为ElemTyp ...

随机推荐

  1. 我的AndroidStudio设置

    转载:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/ 官方下载有两个地方,均需要FQ. Android Deve ...

  2. Centos中安装vim

    Centos, 默认没有安装VIM, 所以要当然要安装了, 直接yum install vim是不行的, 首先: yum install vim* 会看到vim-enhanced这个包,没错, 我们要 ...

  3. Aizu 2309 Sleeping Time DFS

    Sleeping Time Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...

  4. 在Image控件中绘制文字

    //Canvas 在Image控件中绘制文字 procedure TForm1.Button1Click(Sender: TObject);begin  image1.Canvas.Font.Size ...

  5. 文件TEXTBOX

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. [Javascript] Webpack Loaders, Source Maps, and ES6

    Using ES6 To use ES6, we need loader. Modify webpack.config.js file: module.exports = { entry: './in ...

  7. 上struts2的xml在&lt;result type=&quot;redirect&quot;&gt;参数问题

    今天做项目,我遇到了一个精彩的问题. 我需要在struts的xml中的<action>的<result>中配置type="redirect".同一时候须要传 ...

  8. CSDN上下载的一些关于Android程序调用Webservice执行不成功的问题

    今天从书上和CSDN上找了几个关于android调用webservice的样例,这些样例从代码来看.没不论什么错误,可是就是执行不成功.分析了android调用web接口的写法,发现这些样例在调用的时 ...

  9. PHP中获取中英文混合字符串长度[主要是指个数,而不是字符串长度](转)

    今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数. $str = 'Hello world!'; echo strlen($str);   ...

  10. 信号之alarm和pause函数

    使用alarm函数可以设置一个计时器,在将来某个指定的时间,该计时器会超时.当计时器超时时,产生SIGALRM信号.如果不忽略或不捕捉此信号,则其默认动作是终止调用该alarm函数的进程. #incl ...