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 ...
随机推荐
- Java&Xml教程(五)使用SAX方式解析XML文件
Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载. javax.xml.parsers ...
- Js配置资料下载
1.使用windows.loaction.href链接下载: 此种下载在本页打开,eg:windows.location.href = http://www.xxx.xx/aa.apk; 2.使用wi ...
- 15、Scala隐式转换和隐式参数
1.隐式转换 2.使用隐式转换加强现有类型 3.隐式转换函数的作用域与导入 4.隐式转换发生时机 5.隐式参数 1.隐式转换 要实现隐式转换,只要程序可见的范围内定义隐式转换函数即可.Scala会自动 ...
- Centos6.6 安装rsync服务端
一.介绍 在工作中经常遇到代码分发,或者是资料备份,都会用到rsync,配置不算复杂,仅做下记录,安装环境如下: 1) Centos6.6 2) rsync-3.0.6-12.el6.x86_64 3 ...
- Web 服务器与应用服务器的区别是什么?
不太严谨的说法:web服务器就是负责接收用户的Request,然后响应html等给客户浏览器.应用服务器处理一些业务逻辑等. 作者:luo链接:https://www.zhihu.com/questi ...
- 换个语言学一下 Golang (4)——变量与常量
一.变量定义 所谓的变量就是一个拥有指定名称和类型的数据存储位置. //看一个例子 package main import ( "fmt" ) func main() { var ...
- 详解proxy_pass、upstream与resolver
详解proxy_pass.upstream与resolver boldcautious 关注 2018.06.04 10:48 字数 1204 阅读 1434评论 0喜欢 2 应用场景 这里列举几个应 ...
- kernel memory code learn
mem alloc page Noticeble: 1. there are two kind of page: virtual page, physical page. 2. the page st ...
- 7-20 Windows消息队列 (25 分)(模拟水题)
题意: 思路: 用优先队列直接模拟就OK了,另外优先队列存pair的时候比较的是first的值,实测!! 上代码: #include <iostream> #include <que ...
- odoo widget 标签介绍
widget="statusbar" 头部状态条标签 widget="email" 电子邮件地址标签 widget="selection" ...