顺序表----数组结构c++

2023-10-31

#include <iostream>
using namespace std;
#define MaxSize 100
template <class T>
class SqListClass
{
    public:
        SqListClass();
        virtual ~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);//插入数据元素
        bool ListDelete(int i);//删除数据元素
        template <typename TT>
        friend void Reverse(SqListClass<TT>& L);//所有的元素逆置
        //对于含有n个元素的顺序表L,设计一个算法删除其中一个值为x的元素,分析算法的时间
//        复杂度O(n)和空间复杂度O(1)
        template <typename TT>
        friend bool Delaelem(SqListClass<TT>& L,TT x);

        //假设两个递增有序顺序表L1和L2,分别含有n个和m个元素,设计一个算法将
//        他们的所有元素归并为一个递增有序顺序表L3,称为有序表的二路归并,分析
//        算法的时间复杂度O(m+n)和空间复杂度O(1)。
        template <typename TT>
        friend void Merge2(SqListClass<TT>& L1,SqListClass<TT>& L2,SqListClass<TT>& L3);
    private:
        T * data;
        int length;
};
template <typename TT>
void Merge2(SqListClass<TT>& L1,SqListClass<TT>& L2,SqListClass<TT>& L3)
{
    int i=0,j=0,k=0;
    while(i<L1.length && j<L2.length)//两个表都没有遍历完
    {
        if(L1.data[i]<L2.data[j])
        L3.data[k++] = L1.data[i++];
        else
        L3.data[k++] = L2.data[j++];
    }
    while(i<L1.length)//L1没有遍历完
    {
        L3.data[k++] = L1.data[i++];
    }
    while(j< L2.length) L3.data[k++]=L2.data[j++];//L2没有遍历完
    L3.length=k;
}
template <typename TT>
bool Delaelem(SqListClass<TT> &L,TT x){
    int i =0 ;
    while(i<L.length&&L.data[i]!=x) i++;
    if(i>= L.length) return false;
    for(int j=i;j<L.length-1;j++)
    {
        L.data[j]=L.data[j+1];
    }
    L.length--;
    return true;
}
template <class T>
SqListClass<T>::SqListClass()
{
    data = new T[MaxSize];
    length = 0;
}
template <class T>
SqListClass<T>::~SqListClass()
{
    delete[] data;
    length = 0;
}
//完成了初始化
template <class T>
void SqListClass<T>::CreateList(T a[],int n)
{
    int i;
    for( i =0;i<n ;i++)
    {
        data[i]=a[i];
    }
    length = i;
}
template <class T>
void SqListClass<T>::DispList()
{
    int i;
    if(length>0)
    {
        for(i=0;i<length;i++)
        cout<<data[i]<<" ";
        cout<<endl;
    }
}
//取序号为i的元素
template <class T>
bool SqListClass<T>::GetElem(int i,T& e)
{
    if(i<1 || i>length) return false;
    e = data[i-1];
    return true;
}
//删除逻辑序号为i的元素
template <class T>
bool SqListClass<T>::ListDelete(int i)
{
    if(i<0||i>length) return false;
    for(int j=i;j<length;j++)
    data[j-1]=data[j];
    length--;
    return true;
}
template <class T>
bool SqListClass<T>::ListInsert(int i,T e)
{
    if(i<0||i>length) return false;
    for(int j=length;j>=i;j--)
    data[j]=data[j-1];
    data[i-1]=e;
    length++;
    return true;
}
template <class T>
int SqListClass<T>::ListLength()
{
    return length;
}
template <class T>
int SqListClass<T>::LocateElem(T e)
{
    int i =0;
    for( i=0;i<length;i++)
    {
        if(e == data[i])
        return i+1;
    }
    if(i>=length) return 0;
//    while(i<length && e!=data[i] ) i++;
//    if(i>=length) return 0;
//    else return i+1;
}
template <class TT>
void Reverse(SqListClass<TT> &L)
{
    TT temp;
    int i;
    for(i =0 ;i<L.length/2;i++)
    {
        temp = L.data[i];
        L.data[i]=L.data[L.length-i-1];
        L.data[L.length-i-1]= temp;
    }
}


int main()
{
    SqListClass<int> sql;
    int a[MaxSize];
    //初始化
    for(int i=0;i<MaxSize;i++)
    a[i]=i;
    sql.CreateList(a,10);
    sql.DispList();

    SqListClass<int> sql_two;
    sql_two.CreateList(a,20);
    cout<<"sql_two display:"<<endl;
    sql_two.DispList();

    SqListClass<int> sql_three;
    Merge2(sql,sql_two,sql_three);
    sql_three.DispList();
    int temp;
//    sql.GetElem(3,temp);
//    cout<<"sql.GetElem(3,temp):"<<temp<<endl;
//    sql.ListDelete(3);
//    cout<<" sql.ListDelete(3):"<<endl;
//    sql.DispList();
//
//    sql.ListInsert(5,temp);
//    sql.DispList();
//    cout<<"sql.LocateElem(5)"<<sql.LocateElem(5)<<endl;
//    sql.DispList();
//    Reverse(sql);//逆置
//    temp = 5;
//    Delaelem(sql,5);
//    sql.DispList();

//    cout << "Hello world!" << endl;
    return 0;
}
































本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

顺序表----数组结构c++ 的相关文章

  • 《剑指offer》系列---1

    最近一直在看剑指offer 这上面的题目都是比较考察编程能力的 打算做个记录 把写过的代码保存下来 1 实现一个string类 面试官的考察点应该在以下几点 1 模板类的书写 2 对于赋值函数考察的几点 1 是否返回引用 因为只有返回引用
  • 《程序员面试宝典》第6章 宏和const

    一 用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量 int a char b 20 double cc FIND student a 0 FIND student b 4 FIND student cc 4 20
  • 一些笔试题笔记1

    总结一些常见的笔试题 最小公约数和最大公倍数 这个其实很简单 记住概念就可以了 我们利用辗转相除法计算 最大公约数 摘自百度百科 一般地 如果求a和b的最大公约数 a gt b 那么 当时 得 这里表示b整除a 而表示b不能整除 当时 设余
  • 面试常见的八股文记录

    本文是记录平常看到的面试八股文问题 其问题主要是从leetcode中的讨论区整理出来的 答案大多是参考一些大佬讲解来整理的 在此进行整理 方便大家换工作时来熟悉下常见的八股文问题 大家可以看看 也可以讨论下 2021 05 10 微信 后端
  • 硬件工程师笔试题——21大疆秋招

    给志同道合者 成长的方向 鄙人不才 答案有误 三思 三思
  • 编程求解字符串中每个字母出现的次数

    统计在tt字符中 a 到 z 26各字母各自出现的次数 并依次放在pp所指的数组中 include
  • DFS 相关例题

    会顶科技 两道 第一行为一个整数N 用来表示球的个数 第二行为一个整数M 用来表示桶的个数 从第三行到第N 2行 每行有M个整数 这些整数要么为0 要么为1 输出描述 输出为一个整数 输出1代表可以放入所有的球 输出0代表无法放入所有的球
  • 区别对象和数组的方法

    区别对象和数组的方法 1 constructor var obj obj constructor object constructor Array 2 obj instanceof Array true 就是数组 false 就是对象 A
  • 绕懵逼之同步/异步 阻塞/非阻塞

    被面试官绕蒙蔽了 特此整理总结一下 1概念解析 1 1 同步与异步概念描述 同步异步概念与消息的通知机制有关 所谓同步就是一个任务的完成需要依赖另外一个任务时 只有等待被依赖的任务完成后 依赖的任务才能算完成 这是一种可靠的任务序列 要么成
  • SQL练习题之求平均分低于80分的班级学生各科成绩并合计学生总分

    是对是错也好 不必说了 是怨是爱也好 不须揭晓 何事更重要 比两心的需要 柔情蜜意怎么可缺少 说不出再见 谭咏麟 文章目录 前言 一 练习题题目 二 创建测试数据 一 创建测试表 二 插入测试数据 三 思路 四 解答 一 详细代码 二 结果
  • 2020年秋招嵌入式软件面试过程总结(华为联发科小米兆易创新)

    秋招投递公司23家 简历被刷1家 笔试 测评挂掉3家 至今无消息的8家 获得Offer的公司有小米 兆易创新 全志科技 浙江大华 海格通信 京信通信 景嘉微电子 广州朗国电子 北京华大电子 中国长城科技集团 文章目录 有面试 联发科北京 7
  • 经典面试题 为什么要用 Docker

    经典面试题 为什么要用 Docker 解决面试题 斩获心仪的 Offer 文章目录 经典面试题 为什么要用 Docker 一 Docker是什么 二 Docker 的优势 1 更高效的利用系统资源 2 更快速的启动时间 3 一致的运行环境
  • 【2021-04-07华为机试】第二题:各任务执行完毕需要的时间

    题目 给定N个任务 1 lt N lt 100 任务编号从0开始顺序累加 这N个任务在系统中排队顺序执行 每个任务的自身执行时间为非负整数 依次为t1 t2 tn 部分任务之间存在依赖关系的 某任务所依赖的任务如果没有执行 则该任务需要重回
  • leetcode 编写一个函数来查找字符串数组中的最长公共前缀。

    编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 string longestCommonPrefix vector
  • 指针笔试题(一)

    include
  • 2012.8.28 阿里巴巴电话面试

    半个小时左右的电话面试 问题不是太难 算法和数据结构是薄弱环节 1 现在主要在做什么研究 做过的项目介绍和在其中担任的职责 2 问语言方向 是否做过相关的工作 3 是否了解linux系统 在系统中都做过什么 用什么编译器 4 数据结构中 栈
  • 蘑菇街前端面试

    vue与jquery的区别 为什么现在很多人使用vue vue怎样实现双向数据绑定 内部原理 1 jQuery首先要获取到dom对象 然后对dom对象进行进行值的修改等操作 2 Vue是首先把值和js对象进行绑定 然后修改js对象的值 Vu
  • 经典面试题 TCP和UDP有什么区别?

    经典面试题 TCP和UDP有什么区别 解决面试题 斩获心仪的 Offer 文章目录 经典面试题 TCP和UDP有什么区别 一 TCP和UDP是什么 二 TCP和UDP有什么区别 1 TCP和UDP区别总结 2 TCP三次握手和四次挥手 2
  • 2014 奇虎360 笔试主观题

    1 在审计某一开源项目的代码时 假设有下面一个foo 子函数的实现 从安全的角度看 会存在安全漏洞吗 有的话 请 1 描述漏洞细节 2 说明可以利用的方法 3 还有该怎么修补漏洞 没有的话 也请说明为什么 int foo void func
  • 多益网络校招 —— 二面hr面

    11月27号晚上技术面试 12月6号才收到hr面试通知 12月8号hr面 整轮hr面试只有15分钟 一开始是做自我介绍 然后问了以下问题 1 我父母对我的职业有什么看法 2 之前有没有拿到满意的offer 3 为什么学前端 4 未来职业规划

随机推荐

  • 2023.6.26

  • 【SWT】Composite中的子控件居中设置

    简介 SWT Composite是一种用于构建Java图形用户界面的工具包 它提供了丰富的控件和容器来创建复杂的用户界面 在一些情况下 需要将子控件在SWT Composite中进行居中设置 本篇博客将详细介绍如何在SWT Composit
  • mysql数据库应该怎么存储数组

    MySQL 数据库没有专门用于存储数组的数据类型 因此 如果你想在 MySQL 中存储数组 你可以使用以下几种方法之一 将数组转换为字符串 然后使用字符串类型 例如 VARCHAR 存储 例如 可以将数组 a b c 转换为字符串 a b
  • 【计算机网络】物理层(超多图详析)

    最近建立了一个知识库 里面很多相关知识 欢迎来访 https www yuque com zhumulangmafeng 5sdfr 前言 上一期我们已经完成了计算机网络 总览 知道了一些计算机网络的基础内容 如果你漏掉了 建议你先去看看上
  • 虚拟+现实:半实物仿真测试有效保证嵌入式系统的健壮与可靠

    随着现代信息技术与软硬件技术的快速发展 嵌入式系统的功能日益强大 嵌入式设备和软件应用领域越来越宽泛 近年来 嵌入式软件代码量呈爆炸式增长 对测试的要求越来越高 尤其是涉及防务 航空 汽车等安全关键领域 更加全面 系统的测试方法是必不可少的
  • 中国互联网技术联盟发布首个“互联网+”权威定义

    2015年5月 6月 7月 国家密集性的发布了三大重型文件 中国制造2025 大众创业万众创新政策措施意见 互联网 行动指导意见 随后 中国互联网技术联盟邀请专家委员会对此专门进行了闭门研讨和解读梳理 并将梳理成果向业界正式发布 一 基于互
  • [Wc2007]剪刀石头布【竞赛图最大三元环个数+费用流】

    题目链接 BZOJ 2597 给定一个存在不确定边的竞赛图 求原图有向三元环数的最大值 有些边是不确定方向的 我们需要给这些边定向来使得三元环的数目最多 总所周知 由三个点的竞赛图组成的三元环 每个点的入度都应该为1 这样才可以组成一个三元
  • [DCDC](DC-DC 电感)纹波率r是难题?来我这里来学习

    大家可能都有深刻体会 电子知识博大精深 无穷无尽 每个简单的知识点背后 都蕴含着无穷无尽的宝藏 古人云 学无止境 我现在就是这种感觉 学的越多 也就更加战战兢兢 如履薄冰 但我始终相信 虽然知识是无限的 但人的能力也是无限的 只要你肯 明天
  • kubeasz一键部署harbor、containerd运行时、高可用k8s(1.26.x)集群-Day 02

    1 生产环境部署架构 1 多master节点 实现master节点的高可用和高性能 2 单独的etcd分布式集群 生产使用SSD盘 高可用持久化k8s资源对象数据 并实现高可用 3 多node节点运行业务pod node节点可以是不同硬件规
  • 升级Linux下的sudo

    1 sudo 命令情景分析 介绍 Linux 下使用 sudo 命令 可以让普通用户也能执行一些或者全部的 root 命令 本文就对我们常用到 sudo 操作情景进行简单分析 通过一些例子来了解 sudo 命令相关的技巧 情景一 用户无权限
  • git常用命令记录

    多人合作开发代码提交流程 暂存新增的代码 快捷使用 git stash git stash save record 更新代码 快捷使用 git pull git pull origin master 释放刚刚暂存的代码 git stash
  • PMP考试必备-概念区分篇(二)

    一 组织过程资产和经验教训的区别 组织过程资产包括 模版 数据库 经验教训 模版和数据库是相对客观的资料 经验教训都是主观总结出来的东西 二 经验教训和问题的区别 1 经验教训必须和选择有关 你的选择让你感到得意或后悔的事情 叫经验教训 2
  • 【全网最强】2022年最新,一文带你学习并掌握C/C++基础知识,技巧,举一反三,C/C++语法知识与实用技巧。题解两种代码(C语言和C++).覆盖知识面广.代码有注释让你理解更快

    必须读的 前言 通俗易懂 小白来了都说好 包括C C 基本知识 精选136道题 C C 语法知识与实用技巧 题解两种代码 C语言和C 覆盖知识面广 1 变量 表达式与顺序语句 2 scanf printf语法及判断语句 3 循环语句 4 数
  • c言语库函数qsort的最详细用法

    qsort递增排序 qsort函数参数 void qsort void base 要比较数组的起始地址 size t num 要比较数组的大小 size t width 一个数组元素的大小 int comple const void ele
  • 蓝桥杯单片机数码管技巧

    数码管使用技巧 1如何运用数码管配合按键切换界面显示切换界面 方法 定义一个变量来显示显示界面 通过按键来改变变量的数值 从而切换显示界面 include
  • VS+QT没有自动生成.ui对应的ui_XXXX.h头文件问题

    1 在qt安装包下 gt qbase gt bin 目录下有对应的uic exe用来生成 ui对应的ui XXXX h头文件 所以 cmd进入bin目录 运行uic XXXX ui ui XXXX h就可以生成 也可以添加路径进行指定 如
  • EOS 数据签名与公匙验证代码用例

    本文编写了一个小例子诠释了EOS是如何对数据签名与校验的 通过本文可以理解了签名的重要性和数据的不可篡改性 系统 ubuntu 版本为EOS1 1 1 注 因为本文的程序是把EOS里面的钱包和fc工具的代码全部提取出来编译的 这个过程相对复
  • Redis简单入门

    一提起数据库 大多数人可能想到的主要是Oracle MySQL以及Microsoft SQL Server这三大巨头 但除了这三巨头外 很多新兴的数据库也慢慢进入开发者的眼帘 比如最近越来越火的搜索引擎式数据库Elasticsearch D
  • 202303读书笔记

    202302读书笔记 长安的荔枝 只要肯努力 办法总比困难多 长安的荔枝 这本书真是酣畅淋漓啊 读起来一气呵成 以讲故事的口吻叙述 上林署九品小官员 李善德 兢兢业业工作多年 终于借贷买了房 让妻子儿女有一个安身之所 一面沉浸在喜悦里 一面
  • 顺序表----数组结构c++

    include