版权声明:您好,转载请留下本人博客的地址,谢谢 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
我一定能够把算法搞好的。