使用C++实现的线性表

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/44681317 现在大三下学期了,由于参加了阿里巴巴的大四实习生校园招聘,第一轮电话面试就被刷下来了,这让我意识到了自己的能力还很不足,意识到了自己与那些大公司需要的人还有很长的路要走。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/44681317

现在大三下学期了,由于参加了阿里巴巴的大四实习生校园招聘,第一轮电话面试就被刷下来了,这让我意识到了自己的能力还很不足,意识到了自己与那些大公司需要的人还有很长的路要走。

在电话面试中,基本上是根据我填写的简历来的,我写的是对linux内核非常感兴趣,所以,面试官问我了一些关于内核的一些问题,我竟头脑发蒙,啥都想不起来了。第一个问题就是问我从计算机上电开始,linux内核的启动过程。这一下我竟然连MBR,GRUB,initrd什么的都想不起来了,之前看过几本linux内核的书,但是看完之后总在脑海中什么也没有留下,然后我就问了面试官这个问题,他告诉我一定要和项目相结合才能够获得比较好的效果。

然后他问我感觉自己的算法怎么样,我说一般,然后就没有然后了,算法的问题也没有问我,估计是对我失望了,哎,我自己也意识到了自己的算法不行了,所以自己这几天恶补算法和操作系统,linux内核的东西。

下面是我的一个线性表的C++实现。

自己实现了一个异常类:

#ifndef EXCEPTION_H
#define EXCEPTION_H

// bad initializers
class BadInitializers {
   public:
      BadInitializers() {}
};

// insufficient memory
class NoMem {
   public:
      NoMem() {}
};

// improper array, find, insert, or delete index
// or deletion from empty structure
class OutOfBounds {
   public:
      OutOfBounds() {}
};

// use when operands should have matching size
class SizeMismatch {
   public:
      SizeMismatch() {}
};

// use when zero was expected
class MustBeZero {
   public:
      MustBeZero() {}
};

// use when zero was expected
class BadInput {
   public:
      BadInput() {}
};

#endif // EXCEPTION_H

下面是C++定义的线性表,由于使用了模板类,所以其类定义和类实现不允许分开,只能放在一个文件中了:
#ifndef LINEARLIST_H
#define LINEARLIST_H

#include "Exception.h"
#include 

template
class LinearList
{
public:
    LinearList(int ListMaxSize = 10);
    ~LinearList(){delete [] element;}
    bool isEmpty() const{return length == 0;}     //判断线性表是否为空
    int Length(){return length;}           //获得线性表的长度
    LinearList& insert(int k,const T& x);    //向线性表的k中插入一个元素x
    LinearList& Delete(int k,T& x);          //删除线性表中k位置的元素,并返回到x中
    bool Find(int k,T& x) const;                    //返回线性表中第k个位置的元素
    int Search(const T& x) const;               //查找线性表中元素为x的位置
    LinearList& add(const T& x);                   //在线性表后面插入一个元素
    LinearList& clear();                     //清空线性表中的元素
    bool contains(T& x);                        //判断线性表中是否含有 元素x
    T& get(int x);                                  //获取x位置的元素
    LinearList& set(int index,T& x); //用指定的元素代替线性表中相应位置的元素
    void print();
private:
    int MaxSize;
    int length;
    T* element; //一维动态数组
};

template
LinearList::LinearList(int ListMaxSize)
{
    MaxSize = ListMaxSize;
    length = 0;
    element = new T[MaxSize];
}

template
bool LinearList::Find(int k, T &x) const
{
    /**
    *   如果提供的k值小于1或者是大于其现在的长度
    *   则返回false
    *   如果提供的k值是可以的,则直接使x等于当前
    *   位置的值,并返回true
    */
    if(k < 1 || k > length)
        return false;
    x = element[k];
    return true;
}

template
int LinearList::Search(const T &x) const
{
    /**
      * 寻找元素值为x的位置并返回
      */
    for(int i = 0;i < length;i++){
        if(x == element[i])
            return ++i;
    }

    return 0;
}

template
LinearList& LinearList::insert(int k, const T &x)
{
    if(k < 0 || k > length)
        throw OutOfBounds();
    if(length == MaxSize)
        throw NoMem();
    for(int i = length;i >k;i--){
        element[i]  = element[i-1];
    }
    element[k] = x;
    length++;

    return *this;
}

template
LinearList& LinearList::Delete(int k, T &x)
{
    if(!Find(k,x))
        throw OutOfBounds();

    for(int i = k;i < length;i++){
        element[i-1] = element[i];
    }

     length--;
    return *this;
}

template
LinearList& LinearList::add(const T& x)
{
    if(length == MaxSize)
        throw NoMem();

    element[length] = x;
    length++;

    return *this;
}

template
void LinearList::print()
{
    for(int i = 0; i < this->Length();i++){
        std::cout << element[i] << std::endl;
    }
}

template
LinearList& LinearList::clear()
{
    for(int i = 0;i < this->Length();i++){
        element[i] = 0;
    }

    length = 0;

    return *this;
}

template
bool LinearList::contains(T &x)
{
    bool isContains = false;

    for(int i = 0;i < length;i++){
        if(element[i] == x)
            isContains = true;
    }

    return isContains;
}

template
T& LinearList::get(int x)
{
    if(x < 0 || x >= length)
        throw OutOfBounds();
    return element[x];
}

template
LinearList& LinearList::set(int index, T &x)
{
    if(index < 0 || index >= length)
        throw OutOfBounds();
    element[index] = x;
}

#endif // LINEARLIST_H

我一定能够把算法搞好的。

目录
相关文章
|
算法 调度 C++
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
557 0
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
546 7
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
710 5
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
539 5
|
存储 机器学习/深度学习 人工智能
c/c++线性表实现附源码(超详解)
c/c++线性表实现附源码(超详解)
|
存储 设计模式 算法
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
389 0
|
存储 算法 Linux
【C/C++ 线性表】C++ 从零开始实现 双向循环链表(Exploring Doubly Circular Linked List in C++)
【C/C++ 线性表】C++ 从零开始实现 双向循环链表(Exploring Doubly Circular Linked List in C++)
410 0
|
存储 算法 编译器
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
727 0
|
存储 算法 程序员
【C/C++ 线性表 简介】C/C++中的线性表探索:从标准库到自定义实现
【C/C++ 线性表 简介】C/C++中的线性表探索:从标准库到自定义实现
428 0
|
存储 数据可视化 C++
C/C++线性表之链式与顺序存储结构(附代码)(二)
C/C++线性表之链式与顺序存储结构(附代码)
239 0

热门文章

最新文章