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. CSS——border

    表格细线: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  2. servlet-响应的定时刷新

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

  3. [Windows Server 2012] 安装护卫神·主机管理系统

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

  4. 非常好用的1款UI自动化测试工具:airTest

    网易团队开发的UI自动化测试神器airTest,下载地址:http://airtest.netease.com/tutorial/Tutorial.html Appium和airTest对比,我的看法 ...

  5. Java并发——阿里架构师是如何巧用线程池的!

    一.创建线程 1.创建普通对象,只是在JVM的堆里分配一块内存而已 2.创建线程,需要调用操作系统内核的API,然后操作系统需要为线程分配一系列资源,成本很高 线程是一个重量级对象,应该避免频繁创建和 ...

  6. Linux学习笔记之 Btrfs文件系统简介及使用

    Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息.而 ext2/3 却避免了这种被称为”错误扩散”的问题. Btrfs相关介绍: Btrf ...

  7. P1886 滑动窗口&&P1440 求m区间内的最小值

    声明:下面这两个题就不要暴力了,学一学单调队列吧 推荐博文:https://www.cnblogs.com/tham/p/8038828.html 单调队列入门题 P1440 求m区间内的最小值 题目 ...

  8. 第四节:numpy之数组排序

  9. 内存管理(malloc和free的用法)

    内存管理 1.堆和栈的区别: 1>栈的特征 1).执行的速度相对较快: 2).空间较小: 3).生存期由系统决定: 4).作用域较小: 5).有名空间,可以通过变量名或者数据名访问: 2> ...

  10. 【codeforces 508A】Pasha and Pixels

    [题目链接]:http://codeforces.com/contest/508/problem/A [题意] 让你在一个n*m的方格上给方格染色; 顺序给出染色的k个格子 如果在某一时刻 有一个2* ...