使用C++实现的线性表

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 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

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

目录
相关文章
|
6月前
|
算法 调度 C++
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
153 0
|
6月前
|
存储 机器学习/深度学习 人工智能
c/c++线性表实现附源码(超详解)
c/c++线性表实现附源码(超详解)
78 0
|
6月前
|
存储 设计模式 算法
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
108 0
|
6月前
|
存储 算法 Linux
【C/C++ 线性表】C++ 从零开始实现 双向循环链表(Exploring Doubly Circular Linked List in C++)
【C/C++ 线性表】C++ 从零开始实现 双向循环链表(Exploring Doubly Circular Linked List in C++)
122 0
|
6月前
|
存储 算法 编译器
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
99 0
|
6月前
|
存储 算法 程序员
【C/C++ 线性表 简介】C/C++中的线性表探索:从标准库到自定义实现
【C/C++ 线性表 简介】C/C++中的线性表探索:从标准库到自定义实现
131 0
|
存储 算法 C++
C/C++线性表之链式与顺序存储结构(附代码)(一)
C/C++线性表之链式与顺序存储结构(附代码)
197 0
|
存储 数据可视化 C++
C/C++线性表之链式与顺序存储结构(附代码)(二)
C/C++线性表之链式与顺序存储结构(附代码)
111 0
|
存储 C语言 C++
链表数据结构的C++实现:类模板实现线性表的链式存储
链表数据结构的C++实现:类模板实现线性表的链式存储
133 0
链表数据结构的C++实现:类模板实现线性表的链式存储
|
存储 C语言 C++
C++类模板实现线性表的顺序存储
C++类模板实现线性表的顺序存储
120 0
C++类模板实现线性表的顺序存储