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. html5——2D转换

    transform 属性 1.向元素应用 2D 或 3D 转换 2.该属性允许我们对元素进行旋转.缩放.移动或倾斜. 缩放与位移 transform: scale(, 0.5);//水平缩放,垂直缩放 ...

  2. html——导航demo

    通过行内块.伪类对导航栏进行设置 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  3. servlet-请求重定向

    package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.ser ...

  4. android studio 控件提示大写

    方法一: 在第一行找到File进入找到setting,找到code completion 右侧复选框 选择-->None—->ok 方法二:<item name="andr ...

  5. 白盒-CNN纹理深度可视化: 使用MIT Place 场景预训练模型

    MIT发文:深度视觉的量化表示................ Places2 是一个场景图像数据集,包含 1千万张 图片,400多个不同类型的场景环境,可用于以场景和环境为应用内容的视觉认知任务. ...

  6. GitHub代码托管平台搭建

    GitHub代码托管平台搭建 注册账户以及创建仓库 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/. 之后就可以创建仓库了(免费 ...

  7. Python星号表达式

    有时候可能想分解出某些值然后丢弃它们,可以使用诸如 _ 或者 ign(ignored)等常用来表示待丢弃值的变量名: record = ('ACME', 50, 123.45, (12, 18, 20 ...

  8. mysql 如何用命令清除表数据,让表数据索引是从0开始呢?

    truncate MYTABLE 这样就可以了 其实这个命令就相当于删除表再建 所有的数据都还原 可以使用工具来完成这个操作 右键单击要操作的表,选择Turncale Table 执行查询语句,数据就 ...

  9. java中关于数组的初始化

  10. 1 Web 知识基础

    一.什么是跨域访问举个栗子:在A网站中,我们希望使用Ajax来获得B网站中的特定内容.如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.你可以理解为两个域名之间不能跨过域名来发送请求或者请求 ...