C++学习之模板线性表

删除线性表指定位置的元素(单链表实现) 4.1假设一个线性表包含下列元素:,使用图4.1的List ADT编写一些C++语句,删除值为15的元素。 #include "stdafx.h" #include #include #incl 阅读详情
//List.h
#ifndef LIST_H
#define LIST_H
/***
*描述:线性表基类
*作者:CaoZhongPing 
*日期: 2012-4-7
*/
template <typename T>
class List
{
  public:
         List();
         ~List();
         virtual int size()const=0;//表的大小
         virtual int length()const=0;//表的实际元素个数
         virtual int search(T& x)const=0;//获取元素x在表中的索引
         virtual T* getData(int i)const=0;//获取第I个元素
         virtual void setData(int i,T& x)=0;//修改第i个元素的值为x
         virtual bool add(int i,T& x)=0;//在第I个位置插入x
         virtual bool remove(int i,T& x)=0;//移除x
         virtual bool isEmpty()const=0;
         virtual bool isFull()const=0;
         virtual void sort()const=0;
         virtual void input()=0;
         virtual void output()=0;
         virtual List<T> operator=(List<T>& L)=0;//复制 
         
};
#endif

">//ArrayList.h
#ifndef ARRAYLIST_H
#define ARRAYLIST_H
#include <iostream>
#include <cstdlib>
#include "List.h"

/***
*描述:基于数组的线性表声明 
*作者:CaoZhongPing 
*日期: 2012-4-7
*/
const int defaultSize = 20;
using namespace std;
template<typename T>
class ArrayList:public List<T>
{
      protected:
                T* data;
                int maxSize;
                int last;//当前插入的最后位置
                void reSize(int newSize);//调整大小
     public:
            ArrayList(int size=defaultSize);
            ArrayList(ArrayList<T>& x);//复制构造函数
            ~ArrayList();
            int size()const;
            int length()const;
            int search(T& x)const;
            bool add(int i,T& x);
            bool remove(int i,T& x);
            T* getData(int i)const;
            void setData(int i,T& t);
            bool isEmpty()const;
            bool isFull()const;
            void input();
            void output();
            void errorMsg();
            ArrayList<T> operator=(ArrayList<T>& L);
};
#endif

//ArrayList.cpp

/***
*描述:基于数组的线性表实现 
*作者:CaoZhongPing 
*日期: 2012-4-7
*/
#include "ArrayList.h"

//实现构造函数 
template<typename T>
ArrayList<T>::ArrayList(int size)
{
      if(size>0)
      {
          maxSize = size;
          last = -1;//实际长度置为空
          data = new T[maxSize];      
          if(data == NULL)
          {
            errorMsg();     
          }
      }                      
}
//实现复制构造函数
template<typename T>
ArrayList<T>::ArrayList(ArrayList<T>& L)
{
    maxSize = L.size();
    last = L.length()-1;
    data = new T[maxSize];
    if(data != NULL)
    {
       for(int i=1;i<=last+1;i++)
       {
            data[i-1] = L.getData();   
       }       
    }else{
         errorMsg() ; 
    }
                                       
}  
template<typename T>
ArrayList<T>::~ArrayList()
{
   delete[]data;
}
//实现调整表的大小
template<typename T>
void ArrayList<T>::reSize(int newSize)
{
     if(newSize>0&&newSize!=maxSize)
     {
        T* newArr = new T[newSize];
        if(newArr!=NULL)
        {
           int n =last+1;
           T* srcPtr = data;
           T* destPtr = newArr;
           while(n--)
             *destPtr++ = *srcPtr++;//复制元素
           delete[] data;//删除旧数据
           data = newArr;
           maxSize = newSize;              
        }else{
             errorMsg(); 
        }          
     }                    
} 
//获取t索引 
template<typename T>
int ArrayList<T>::search(T& t)const
{
    for(int i=0;i<=last;i++)
       if(data[i] == t)
           return i;
    return -1;  //找不到            
} 
template<typename T>
bool ArrayList<T>::add(int i,T& t)
{
     if(last == maxSize-1)
             return false;
     if(i<0||i>last+1)
             return false;
     for(int j=last;j>=i;j--)
        data[j+i]=data[j];//依次后移空出i位置
     data[i]=t;
     last++;
     return true;                             
}
template<typename T>
bool ArrayList<T>::remove(int i,T& t)
{
     if(last==-1)
           return false;
     if(i<1||i>last+1)
           return false;
     t = data[i-1];
     for(int j=i;j<=last;j++)
        data[j-1]=data[j];
     last--;
     return true;                                
}
template<typename T>
void ArrayList<T>::input()
{
     cout<<"nothing";
}
template<typename T>
void ArrayList<T>::output()
{
     cout<<"nothing";
}

template<typename T>
int ArrayList<T>::length()const{
    return last+1;
}
template<typename T>
int ArrayList<T>::size()const{
    return maxSize;
}
template<typename T>
T* ArrayList<T>::getData(int i)const
{
    return (i>0&&i<=last+1)?&data[i-1]:NULL;           
}
template<typename T>
void ArrayList<T>::setData(int i,T& t)
{
     if(i>0&&i<=last+1)
          data[i-1]=t;
}
template<typename T>
 bool ArrayList<T>::isFull()const
{
     return last == maxSize-1;
}   
template<typename T>
bool ArrayList<T>::isEmpty()const
{
     return last==-1;
}          
template<typename T>
void ArrayList<T>::errorMsg()
{
    cerr<<"初始化失败"<<endl; 
}
template<typename T>
ArrayList<T> ArrayList<T>::operator=(ArrayList<T>& L)
{
    cout<<"nothing";         
    return L;
}
大智慧L2实时api接口的逐笔委托功能执行代码分享 用过l2行情接口的投资者应该都了解大部分的接口都是有逐笔委托功能的,那么大智慧L2实时api接口也有着很强大的逐笔委托功能,投资者可以通过这个逐笔委托功能可以看到一个股票的每天出现的全部委托指令,那么在这个逐笔委托功能里包含了委托价格、委托时间、委托量和委托方向四个要素!那么接下来小编就分享一下大智慧L2实时api接口的逐笔委托功能执行代码!那么在这里提个醒:投资者可以在大智慧L2实时api接口进行设置过滤,在逐笔委托列表里,就仅仅只会显示超过设置委托量或委托额的委托单,而不再显示小单。 阅读详情

相关推荐

ComfyUI入门学习-教程篇

深入的 ComfyUI 教程,不同功能节点的详细指南。一个比较有意思的Comfyui教程,动画式学习。从安装到基础教程、高级教程再到各种工作流。非常全面,有教程有搭建好的工作流。

wincyfu的博客 1330

四、线性表的定义、特点和类型定义及C++模板实现

文章目录1、线性表定义2、线性表的逻辑特征3、线性表的抽象数据类型4、线性表的顺序表示和实现5、线性表的优缺点THE END 1、线性表定义 \qquad线性表是具有相同特性的数据元素的一个有限序列。 \qquad线性表n(n≥0)n(n \geq 0)n(n≥0)个数据元素(结点)a1,a2,...,ana_1, a_2, ... , a_na1​,a2​,...,an​组成的有限序列。 \qquad其中数据元素的个数nnn定义为表的长度; \qquad当n==0n==0n==0时,称为空表; \qqu

dragon Fly的博客 1190

MIKE21桥墩模拟实战:抠网格与构筑物法对比与选型指南

本文详细对比了MIKE21软件中抠网格法与构筑物法在桥墩模拟中的应用,包括操作步骤、适用场景及优缺点分析。通过实际案例数据展示两种方法的精度与效率差异,并提供选型决策树和常见问题解决方案,帮助工程师根据项目需求选择最优模拟方法。

weixin_42656416的博客 322

线性表容器list类模板-C++实现

线性表是一种常用的数据类型,本文将用双链表实现一个线性表结构的类模板 1)线性表容器声明 //declear class list template<typename ElementType> class list { private: struct DataNode; //储存数据的结构体类型 typedef DataNode*NodePtr; //指向储存数据的指针类型 NodePtr head, tail; //数据的头结点,尾结点 int _size; //当前线性表的数据量

m0_55464171的博客 599

UFS Host Controller工作流程

contentsUFS架构图HCI接口架构传输请求接口(Transfer Request Interface)UFS 主机控制器寄存器接口(host controller Interface)UTP 层数据传输Host Software与Host Controller的交互Host Controller初始化配置与控制CRYPTOCFG 配置过程 该文档描述了UFS Host Controller的主要运作流程以及在开源内核代码hisi平台中的host controller的接口函数设计 文档大部分内容参

Frank_sample的专栏 1万+

Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装。 工作的电脑不能上外网,所以不能通过直接输入pip命令来安装。 环境:电脑上已经安装了Python(没有安装的请参考其他教程)。 Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包的步骤如下: ...

dayou7738的博客 4943

《C++实现数据结构》:线性表

线性表类模板如下,是顺序表类和链表类的基类。#include <iostream> using namespace std;//线性表基类 template <typename T> class LinearList{ protected: int n; //线性表的长度 public: virtual bool IsEmpty() const = 0; //若线性表空

ancientmoondjay的博客 1023

HTML流光爱心(完整代码)

HTML语言实现红蓝色流光爱心效果的完整代码。

AIGC 1万+

C++使用模板类创建线性表(顺序、链式)并应用

在讨论线性表的顺序及链式存储映像,并在此基础上给出其基本操作的实现之前,先以模板的形式为ADT List建立一个抽象类。 //List.h #pragma once template <class ElemType> class List { public: //后面加个const 表明该函数不会改变成员函数的值!该函数可以被常量对象访问(const)。 //注意 加了const...

Ai_King的博客 1839

27、物联网中的量子密钥分发:安全通信新范式

本文探讨了物联网(IoT)快速发展所带来的安全挑战,并提出量子密钥分发(QKD)作为应对新兴威胁的新范式。文章详细介绍了QKD的基础原理、BB84协议的实现流程以及其在物联网中的应用前景,同时强调了安全专业人员提升技能、制定标准化指南以及跨学科合作的重要性。通过利用量子力学特性,QKD能够提供更高的通信安全性,抵御量子计算等未来威胁,为物联网的安全发展提供保障。

tequila的博客 157

【100%通过率】华为OD机试真题 Java&Go 实现【查找单入口空闲区域】【2022.11 Q4 新题】

给定一个 m xn 的矩阵,由若干字符 和0构成,X表示该处已被占据,0"表示该处空闲,请找到最大的单入口空闲区域.解释:空闲区域是由连通的O组成的区域,位于边界的0可以构成入口,单入口空闲区域即有目只有一个位于边界的0作为入口的由连通的'O"组成的区域。 如果两个元素在水平或垂直方向相邻,则称它们是“连通”的。

MISAYAONE的博客 2万+

写给自己的-关于怎样学习数据结构

<br />最近买了本数据结构c++版,刚刚看到线性表就看不下去了,原因是这个c++的数据结构喜欢用模板,这个东东是我最怕的东西,以前学习一本书从来没有这次这么失落过,看来这次是真的要考验我的时候了。<br /> <br />我一般学习东西都寻求在最短的时间学会一个东西,可是这次看样子这种思想要打消了,看来要稳扎稳打了。坚持~~

瓜蛋的博客 455

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

(一)《数据结构与算法》 青岛大学-王卓 线性表 C++

《数据结构与算法》 青岛大学-王卓 线性表 C++

weixin_49642005的博客 1129

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++自定义迭代器模板,实现ArrayList基本操作,自定义迭代器遍历

运用到的知识:(不分先后) 模板,类,循环数组,线性表,指针,异常,迭代器,输入输出等C++基础 #include<iterator> #include<iostream> #include<vector> #include<cstring> #include<string> using namespace std; class EmptyListException :public exception { public: EmptyLis

xuanweiace的博客 680

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【数据结构C++】线性表/顺序表-数据类型、增删改查操作

我们在第一章中认识了数据结构的内容,以及数组和Vector的语法和区别,这张我们着重学习数据结构中线性表的顺序存储结构的相关操作和应用。包括顺序表的增删改查等代码的实现。

JingYan_Chan的博客 1748

C++数据结构--线性表的顺序存储结构

C++数据结构--线性表的顺序存储结构

m0_73443478的博客 522

线性表(c++描述)

线性表(c++描述) 最近学了c++,把数据结构用c++再写一遍,加深一下对c++语法的理解 学习c++本来是想利用他的库,节省一下写算法的时间,c语言这种面向过程语言对每个数据结构都要再写一遍,或者因为数据类型,再修改一遍,复用性有比较大的局限性。写了一点线性表的算法后,发现c++的多态性确实很好用,模板类可以很轻松的应用于多种数据类型,但是,对于简单的题目来说,代码有些繁琐,特别是对抽象类的继承,顺序表需要继承这个纯虚函数,但链表不需要,有时候就有点头疼。 另外,吐槽下清华大学出版社的数据结构(c++)

photoresist的博客 385

数据结构线性表——顺序表(C/C++(类模板))含代码

总结 就是我个人的学习总结。 线性结构分为线性表(一般),栈、队列、串(特殊),数组(推广) 同一线性表中的数据元素必定是具有相同的特性的,即属于同一数据对象,相邻元素间存在序偶关系。 数据表其实就是一个数据对象,由n(n>=0)个数据元素构成的有限序列 线性表可以分为顺序表和链表 顺序表的特点:可随机存取(类似于数组) //动态分配一维数组表示线性表 #define maxsize 100 //顺序表可以达到的最大长度 struct SqList{ int *elem; //

蛟~ 2052

探索数据结构的奥秘:Data Structure Libraries 开源项目推荐

探索数据结构的奥秘:Data Structure Libraries 开源项目推荐 项目介绍 Data Structure Libraries 是一个专注于数据结构与算法实现的开源项目,旨在通过C++语言的实践,帮助开发者深入理解和掌握数据结构的核心概念。该项目不仅是一个学习工具,更是一个性能优化的实验场,开发者可以通过不断优化代码,提升自己的编程技能。 项目技术分析 技术栈 编程语言: C++...

gitblog_00527的博客 453

C++数据结构之顺序表

顺序表头文件 sq_list.h #ifndef __SQ_LIST_H__ #define __SQ_LIST_H__ #ifndef DEFAULT_SIZE #define DEFAULT_SIZE 1000 // 缺省元素个数 #endif // 顺序表类模板 template <class ElemType> class SqList { protected: // 数据成员: ElemType* elems; // 元素存储空间 int maxSize;

仗剑天涯的博客 556

《数据结构、算法与应用 —— C++语言描述》学习笔记 — 线性表 —— 链式描述 —— 应用

这里写目录标题一、箱子排序1、二级目录三级目录 一、箱子排序 考虑用一个链表保存一个班级学生的清单。我们简化节点的数据为:学生姓名和学生成绩。考虑到成绩范围是有限值,如果我们采用冒泡排序等方式,其时间复杂度都为O(n2n^{2}n2) 。这里我们使用桶排序可以得到对大量数据的更快速排序。桶排序的基本思想是选举与数据范围一致的个数的桶,然后将数据分别放在桶中,最后从桶中将数据重新放回容器中。 使用链表实现的桶排序,其过程如下: 1、逐步删除输入链表的节点,把删除的节点分配到相应的箱子里。 2、把每一个箱子中的

coding-hwz 608

数据结构学习笔记

数据结构学习笔记c++语言基本语法一、基本概念1.数据结构的基本概念1.1数据结构1.2抽象数据类型ADT2.算法的基本概念3.算法分析3.1算法的时间复杂度3.2算法的空间复杂度二、线性表三、栈和队列四、字符串多维数组五、树和二叉树六、图七、查找技术八、排序技术 c++语言基本语法 一、基本概念 1.数据结构的基本概念 1.1数据结构 数据:能输入到计算机中并能被计算机程序识别和处理的符号 数据元素:数据的基本单位,在计算机中通常作为一个整体进行考虑和处理 数据项:构成数据元素的最小单位 数据结构:相互

melodyzhan的博客 453

数据结构c++实现----线性表

大二新开数据结构课了,我把我写的代码粘上来 我的代码会参考网上很多大神的代码,但绝不是抄袭,还有..........起名字是个很大的问题,我英语水平不高啊,所以各位不要纠结于各个函数的名字啊 也不知道#ifdef,#ifndef 是不是我这么用的, 先来一个线性表的,有错误的地方还望指正,谢谢。 // head.h #include template cl

徒步远行 725

第一次作业笔记

qq_43469939的博客 156
上一篇: C++学习之操作符重载
下一篇: 带JCheckBox的Jtree
JAVA2010CZP
博客等级 码龄16年 15粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值