#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. iOS UICollectionView基础

    转载自:http://www.cnblogs.com/wayne23/p/4013522.html  初始化部分: UICollectionViewFlowLayout *flowLayout= [[ ...

  2. PowerShell查询sql server

    function Invoke-SQL1: function Invoke-SQL { param( [string] $DBServer, [string] $Database, [string] ...

  3. html中#include file的使用方法

    有两个文件a.htm和b.htm,在同一文件夹下a.htm内容例如以下 <!-- #include file="b.htm" --> b.htm内容例如以下 今天:雨 ...

  4. android小笔记

    1.启动其他应用程序 Intent launchIntent = getPackageManager().getLaunchIntentForPackage(currentAppInfo.getPac ...

  5. [Practical Git] Compare file changes with git diff

    It can be helpful to see the changes between two sets of code; git diff lets us do this by comparing ...

  6. JavaScript,Java,php的区分大小写问题

    JavaScript 对大小写敏感. JavaScript 对大小写是敏感的.JavaScript属于弱类型语言 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getEle ...

  7. 用C# sqlserver实现增删改查

    using System.Data;using System.Data.SqlClient;//先打开两个类库文件SqlConnection con = new SqlConnection(); // ...

  8. eclipse安装android sdk后工具栏没有图标的设置

    如果没有出现这android图标,选择'Window>Customize Perspective...>Commands',并在'Available command groups'中勾选' ...

  9. Android反射机制实现与原理

    本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...

  10. 马上学Android开发在线视频教程全集

    马上学Android开发视频教程全集 马上学Android开发[马上学Android]安卓开发视频教程 001 Androi 马上学Android开发[马上学Android]安卓开发视频教程 002 ...