~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

基础结构:

#define MAXSIZE 100
typedef struct seqlist
{
    int List[MAXSIZE];
    int length;
}SeqList;

 模型建立之后,就可以创建一个实在的东西

SeqList L;

现在需要对线性表进行初始化操作,这里用的是把length置为0。

void InitList(SeqList &L)
{
    L.length=0;
}

插入操作

主要有三个部分
[1] 插入之前,进行判定。这个判定又分两种情况:<1>插入元素的位置是否合法? 这里,合理的范围是在[1,L->length+1]之间,比如,在第5个位置插入,这里指的是序号。<2>线性表是否已满 ?如果表已满,就不能再进行插入操作,判定为:L.length>=MAXSIZE

if(i<1 || i>L.length+1)
    {
        cout<<"超出位置范围"<<endl;
        return -1;
    }
    else if(L.length>=MAXSIZE)
    {
        cout<<"表已满"<<endl;
        return -1;
    }

[2]移动数据。对于插入来说,是先从后面移动,直到位置i。

借用一个变量j进行移动,这里序号和编号就缠绕在一起。

for(j=L.length;j>=i;j--) /*元素移动*/
    L.List[j]=L.List[j-1];

[3]将元素赋值,最后将length+1;

int InsertElem(SeqList &L,int i,int e)
{
    int j;
    if(i<1 || i>L.length+1)
    {
        cout<<"超出位置范围"<<endl;
        return -1;
    }
    else if(L.length>=MAXSIZE)
    {
        cout<<"表已满"<<endl;
        return -1;
    }
    for(j=L.length;j>=i;j--) /*元素移动*/
    L.List[j]=L.List[j-1];
    
    L.List[i-1]=e;
    L.length++; /*插入数据后,不能忘记将length+1*/
    return 0;
}

删除操作:

和插入类似,也需要进行几步操作, [1] 判定范围  [2]删除操作 [3]线性表长度减1;

int DeleteList(SeqList &L,int i,int *e)
{
    int j;
    if(L.length<=0) /*线性表为空*/
        return -1;
    else if(i<1 || i>L.length) /*超越范围*/
        return -1;
    *e=L.List[i-1];
    for(j=i;j<=L.length-1;j++)
        L.List[j-1]=L.List[j];
    L.length--;/*线性表长度减1*/
    return 0;
}

for(j=i;j<=L.length-1;j++),在这一句中,经过计算,如果删除末位的元素,则不会产生移动,而只执行L.length--
此外,判定条件也可以合并:

if(i<1 || i>L.Length || L.Length<=0)
        return -1;

 

posted on 2016-03-04 02:57  LuoTian  阅读(1340)  评论(0编辑  收藏  举报