C++顺序表(模板总结)
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++顺序表(模板总结)的更多相关文章
- C++ 数据结构学习一(顺序表)
//SequentialList.h 顺序表模板类 #ifndef SEQUENTIAL_LIST_HXX#define SEQUENTIAL_LIST_HXX using std::cout; us ...
- C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现
前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- 数据结构:DHU顺序表ADT模板设计及简单应用:找匹配
顺序表ADT模板设计及简单应用:找匹配 时间限制: 1S类别: DS:线性表->线性表应用 问题描述: 输入范例: 100000100000 99999 99998 99997 99996 99 ...
- 顺序表 C++模板实现
#include <iostream> using namespace std; template <typename T> class list{ private: int ...
- C++基于模板顺序表的实现(带排序)
说明:代码是可以运行的,但是发表在博客上后复制到编译器里面报N多错误,找了半天原因是网页里面生成了一些空白字符,这些字符编译器无法识别. 因此使用了2种插入格式插入代码. 第二个带注释解释的代码不可复 ...
- 顺序表 C++ 类模板实现
顺序表的C++语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立顺序表.输出顺序表 #include <iostream>using namespa ...
- c++顺序表基本功能
头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...
- 顺序表及其多种实现方式 --- C/C++
所谓顺序表,即线性表的顺序存储结构.下面给出的是数据结构---线性表的定义. ADT List{ 数据对象: 线性表的数据对象的集合为{a1,a2,a3,...,an},每个元素的类型为ElemTyp ...
随机推荐
- UICollectionView(一)基本概念
整体预览 高等级的包含和管理(Top-level containment and management) UICollectionView UICollectionViewController UIC ...
- echarts图表初始大小问题及echarts随窗口变化自适应
最近在做一个轮播图,使用的是element的Carousel走马灯,每一个走马灯里是eachrts图,开始页面加载的时候发现echarts图并不能自适应,开始以为是走马灯的问题,后来发现不是 不知道大 ...
- PAT_A1107#Social Clusters
Source: PAT A1107 Social Clusters (30 分) Description: When register on a social network, you are alw ...
- 【Linq】标准查询操作符
A.1 聚合 聚合操作符(见表A-1),所有的结果只有一个值而不是一个序列. Average 和 Sum 针对数值 (任何内置数值类型)序列或使用委托从元素值转换为内置数值类型的元素序列. Min 和 ...
- Use emcli to delete obsolete agent targets in Oracle EM Cloud Control 12c
[oracle@oem ~]$ cd /oem/oms/oms/bin 登录到oms中 [oracle@oem bin]$ ./emcli login -username=sysman Enter ...
- python中enumerate( )函数的使用
enumerate( )函数是遍历一个序列中的元素以及元素对应的下标 seq = ['one', 'two', 'three'] for i, element in enumerate(seq): p ...
- LIS(两种方法求最长上升子序列)
首先得明白一个概念:子序列不一定是连续的,可以是断开的. 有两种写法: 一.动态规划写法 复杂度:O(n^2) 代码: #include <iostream> #include <q ...
- 24.通过ngram分词机制实现index-time搜索推荐
一.ngram和index-time搜索推荐原理 1.什么是ngram 假设有一个单词:quick,在5种长度下的ngram情况如下: ngram length=1,q u i c k ...
- PAT 1118 Birds in Forest
Some scientists took pictures of thousands of birds in a forest. Assume that all the birds appear in ...
- 敏捷开发系列学习总结(4)—Git管理工具sourcetree的安装
现在代码管理都流行用git了,小编以前用过clearcase, svn,vss等.现在用了git后,发现git才是最好的,我觉得它最吸引人的地方应该是它的分布式管理吧.git的具体学习,读者可自己去网 ...