线性表——数组实现

#include  
#include  
#include  
using namespace std;  
#define ms(a) memset(a,0,sizeof(a))  
#define maxlength 100  

/*  线性表数组实现,定义一个具有两个域结构体,数组下标为0的地方不存放元素,可以使位置i对应整数i; 
    第一个域是数组,存放表中元素,数组长度要满足最大需求; 
    第二个域是一个整型变量last,是来表示最后一个元素在数组中的位置。 
*/ 
typedef int Elementtype;
struct LIST{  
    Elementtype element[maxlength];  
    int last=0;  
};  
  
typedef int position;  

//返回 last+1  
position End(LIST L){  
    return(L.last+1);  
}   
  
/*  Insert  
    将 x 插入到表 L 的 p 处 
    1.表已经满了; 
    2.位置不符合,p<1 或者 p>last+1 ; 
    3.位置符合,将 p 及其后边所有元素向后移一位,将 x 插入,last+1 
*/  
void Insert(Elementtype x,position p,LIST &L){  
    position q;  
    if(L.last>=maxlength-1){  
        cerr<<"List is full";  
    }  
    else if(p<1||p>L.last+1){  
        cerr<<"position is not exist";  
    }  
    else{  
        for(q=L.last;q>=p;q--){  
            L.element[q+1]=L.element[q];  
        }  
        L.element[p]=x;  
        L.last++;  
    }  
}  
  
/*  Delete 
    删除线性表 L 中 位于 p 的元素 
    1. 位置不存在,p<1 或 p>last  
    2. 位置存在,从 p 开始,每位向前移动一位,last-1 
*/ 
void Delete(position p,LIST &L){  
    position q;  
    if(p>L.last||p<1){  
        cerr<<"position is not exist";  
    }  
    else{  
        for(q=p;q<=L.last;q++){  
            L.element[q]=L.element[q+1];  
        }  
        L.last--;  
    }  
}  
  
/*  Locate 
    返回线性表中 x 的位置 
    利用的是数组的遍历  
    如果有多个,返回第一个位置, 
    如果不存在,返回 last+1  
*/    
position Locate(Elementtype x,LIST L){  
    position q;  
    for(q=1;q<=L.last;q++){  
        if(L.element[q]==x){  
            return q;  
        }  
    }  
    return L.last+1;  
}  
  
/*  Retrieve 
    返回L中位置为p的元素  
*/
Elementtype Retrieve(position p,LIST L){  
    return L.element[p];  
}  
  
/*  First 
    返回线性表中的第一个位置下标  
*/   
position First(LIST L){  
    return 1;  
}  
  
/*  Next 
    返回位置为 p 的下一个单元的下标 
*/
position Next(position p,LIST L){  
    return (p+1);  
}  
  
/*  Previous 
    返回其位置为 p 的前一个单元的下标  
*/  
position Previous(position p,LIST L){  
    return (p-1);  
}  

/*  Makenull 
    将线性表置空 
*/    
void MakeNull(LIST& L){  
    L.last=0;   
} 

void Print(LIST L){
    if(L.last==0){
        cout<<"List is empty."<







你可能感兴趣的:(模板)