使用C++实现的线性表

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

在电话面试中,基本上是根据我填写的简历来的,我写的是对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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天堂1223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值