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

总结:

1、模板类的实质是什么:让程序员写出和类型无关的代码

2、模板的对象时什么:方法或者类

3、是对类中的一系列操作,提供一个不固定数据类型的方法

用模板做的类的时候要指明对象

Stack<int>  intStack;  // int 类型的栈

Stack<string> stringStack;    // string 类型的栈

我们用的时候必须先指定   也就是先把这个参数传给T

4、这里顺序表的实现可以先选择类型然后选择操作,因为一个类就是一个整体,属性+方法。

5、C++动态创建用new关键词,也就是动态指定数组大小

 #include<iostream>

 using namespace std;

 int maxSize = ;

 // 定义
template <class T>
class SqListClass
{
private:
T *data; // 存放顺序表中的元素
int length; // 存放顺序表的长度 public:
SqListClass(int length); // 构造函数
SqListClass(); // 构造函数
~SqListClass(); // 析构函数
void CreateList(T a[], int n); // 由a数组中的元素建造顺序表
void DispList(); // 输出顺序表L中的所有元素
int ListLength(); // 求顺序表的长度
bool GetElem(int i, T &e); // 求顺序表中某序列号的元素值
int LocateElem(T e); // 按元素查找其第一个序号位置
bool ListInsert(int i, T e); // 在位置i插入数据元素e
bool ListDelete(int i); // 在位置i删除数据元素
void ReverseList(SqListClass<T> &L); // 翻转顺序表 //操作时候的函数
// void CreateList_();
// void QuitSystem();
}; // 线性表的初始化
template<class T>
SqListClass<T>::SqListClass(int length) // 构造函数
{
data = new T[length];
length = ;
}
template<class T>
SqListClass<T>::SqListClass() // 构造函数
{
data = new T[maxSize];
length = ;
}
// 线性表的销毁
template<class T>
SqListClass<T>::~SqListClass() // 析构函数
{
delete [] data;
} // 实现 // 线性表的创建,时间复杂度为O(n)
template<class T>
void SqListClass<T>::CreateList(T a[], int n)
{
int i;
for(i=; i<n; i++){
data[i] = a[i];
}
length = i;
} // 输出线性表的所有元素,时间复杂度为O(n)
template<class T>
void SqListClass<T>::DispList(){
cout << "Out:" << endl;
for(int i=; i<length; i++){
cout << data[i] << " ";
}
cout << endl;
} // 求线性表的长度,时间复杂度为O(1)
template<class T>
int SqListClass<T>::ListLength(){
return length;
} // 求顺序表中某序列号的元素值,,时间复杂度为O(1)
template<class T>
bool SqListClass<T>::GetElem(int i, T &e){
if(i< || i>length) return false;
e = data[i-];
return true;
} // 按元素查找其第一个序号位置,时间复杂度为O(n)
template<class T>
int SqListClass<T>::LocateElem(T e){
int i = ;
while(i<length && data[i]!=e) i++;
if(i>=length) return ;
else return i+;
} // 在位置i插入数据元素e,时间复杂度为O(n)
template<class T>
bool SqListClass<T>::ListInsert(int i, T e){
if(i< || i>length) return false;
for(int j=length; j>=i; j--){
data[j]=data[j-];
}
data[i-] = e;
length++;
return true;
} // 在位置i删除数据元素,时间复杂度为O(n)
template<class T>
bool SqListClass<T>::ListDelete(int i){
if(i< || i>length) return false;
for(int j=i-; j< length; j++){
data[j] = data[j+];
}
length--;
return true;
} // 翻转顺序表
template<class T>
void SqListClass<T>::ReverseList(SqListClass<T> &L){
T temp;
for(int j=; j<L.length/; j++){
temp = L.data[j];
L.data[j] = L.data[length-j-];
L.data[length-j-] = temp;
}
} /***********************************分界线***********************************/
// 创建顺序表 void CreateList_(){
cout<<"请输入顺序表长度"<<endl;
int length;
do{
cin>>length;
if(length<=) cout<<"顺序表长度不合法,请重新输入"<<endl;
}while(length<=);
cout<<"请选择顺序表类型:输入类型后面的数字"<<endl;
int type;
do{
cout<<"int:1 double:2 string:3"<<endl;
cin>>type;
if(type<=||type>=) cout<<"类型输入不合法,请重新输入"<<endl;
}while(type<=||type>=); //创建
SqListClass<int> sqList(length); cout<<"创建线性表成功^_^"<<endl;
} // 退出系统
void QuitSystem(){
cout<<"成功退出系统-_-"<<endl;
} // 主函数
int main(){
int length=;
SqListClass<int> sqList(length); int demand=; while(demand){
cout<<endl;
cout<<"---------------------------------顺序表操作指令---------------------------------"<<endl;
cout<<"*、输入数字 1 ,创建顺序表"<<endl;
cout<<"*、输入数字 0 ,退出系统 "<<endl;
cout<<"--------------------------------------------------------------------------------"<<endl;
cin>>demand;
switch(demand){
case : CreateList_();break;
case : QuitSystem();return ;
}
} // int arr[3] = {3,4,5};
// // 创建线性表
// sqList.CreateList(arr, 3);
// // 输出线性表
// sqList.DispList();
// // 输出线性表的长度
// cout << "sqList length is " << sqList.ListLength() << endl;
// // 求第二个位置的元素
// int a;
// sqList.GetElem(2, a);
// cout <<"The 2 local is elem " << a << endl;
// // 查找元素5的位置
// cout << "The elem 5 local is " << sqList.LocateElem(5) << endl;
// // 在位置4插入元素6
// sqList.ListInsert(2, 6);
// sqList.DispList();
// // 在位置1删除数据元素
// sqList.ListDelete(1);
// sqList.DispList();
// // 翻转顺序表
// sqList.ReverseList(sqList);
// sqList.DispList();
return ;
}

C++顺序表(模板总结)的更多相关文章

  1. C++ 数据结构学习一(顺序表)

    //SequentialList.h 顺序表模板类 #ifndef SEQUENTIAL_LIST_HXX#define SEQUENTIAL_LIST_HXX using std::cout; us ...

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

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

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

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

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

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

  5. 顺序表 C++模板实现

    #include <iostream> using namespace std; template <typename T> class list{ private: int ...

  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. [Windows Server 2012] Filezilla安装方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:FileZ ...

  2. @ResponseBody 返回中文乱码

    第一种解决方法:在@RequestMapping注解添加produces属性 @RequestMapping(value = "testPersonalValidtor.do",p ...

  3. java浅析

    基本结构 1.以字节码的方式运行在虚拟机上,不是直接编译成机器码运行,所以性能上差于 C 但是高于 python这样的解释形语言. 笔者大学期间学习过 汇编和C,工作后使用python,对这两种语言有 ...

  4. jsTree使用记录

    1. ajax请求生成jsTree <span style="font-size:14px;"><script> var r = []; // 权限树中被选 ...

  5. codeforces_724C_Ray Tracing

    C. Ray Tracing time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  6. css页面布局总结

    W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html.xml),表现 标准语言(css),行为标准语言(DOM,ECMAScript<javascript>)组成.这个标准倡 ...

  7. oralce 创建表空间 和 查询进程

    -- Create the user create user lesdba identified by les_321 default tablespace USERS temporary table ...

  8. css3部分注意事项

    CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些? 1.选择器 id选择器( # myid) 类选择器(.myclassname) 标签选择器(div, h1, p ...

  9. luogu P1775 古代人的难题_NOI导刊2010提高(02)(斐波纳契+数学)

    题意 已知x,y为整数,且满足以下两个条件: 1.x,y∈[1…k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满足上述条件的x,y并且使得x^2+y^2的值最大. ...

  10. Ubuntu 18.04 nvidia driver 390.48 安装 TensorFlow 1.12.0 和 PyTorch 1.0.0 详细教程

    最近要在个人台式机上搭建TensorFlow和PyTorch运行环境,期间遇到了一些问题.这里就把解决的过程记录下来,同时也可以作为安装上述环境的过程记录. 如果没有遇到类似的问题,想直接从零安装上述 ...