数据结构之线性表(一)

一、线性表的特性

  1、线性结构的特性

  (1)集合中必存在唯一的“第一元素”和唯一的“最后元素”。

  (2)除最后一个元素之外,均有唯一的后继和唯一的前驱。

  2、线性表的基本操作过程

  (1)用 Setnull(L)置空表;

  (2)用Length(L)求表的长度和表中各元素的个数;

  (3)用Get(L,i)获取表中的第i个元素(1=<i<=n);

  (4)用Prior(L,i)获取i的前驱元素;

  (5)用Next(L,i)获取i的后继元素;

  (6)用Locate(L,x)返回指定元素在表中的位置;

  (7)用Insert(L,i,x)插入新元素;

  (8)用Delete(L,x)删除已存在的元素;

  (9)用Empty(L)来判断是否为空。

  3、线性表的结构特点

  均匀性、有序性。

二、顺序表操作

  线性表的基本操作过程如下:

  (1)计算顺序表的长度

public int GetLength()
{
    return last + 1;   //顺序表的长度就是数组最后一个元素的索引last加1
}

  (2)清空操作

public void Clear()
{
    return last = - 1;//清空所有元素,此时last=-1
}

  (3)判断线性表是否为空

public bool IsEmpty()
{
    if (last==-1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

  (4)判断线性表是否为满

public bool IsFull()
{
    if (last==maxsize-1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

  (5)附加操作

public void Append(T item)
{
    if (IsFull())
    {
        Console.WriteLine("List is full");//在末尾加元素
    }
    data[++last] = item;
}

  (6)插入操作

public void Insert(T item, int i)
{
    //判断顺序表是否已满
    if(IsFull())
    {
        Console.WriteLine("List is full");
        return;
    }
    //判断插入的位置是否正确,
    //i小于1表示在第1个位置之前插入
    //i小于last+2表示在最后一个元素后面的第2个位置插入。
    if (i<1||i>last+2)
    {
        Console.WriteLine("Position is error!");
        return;
    }
    //在顺序表的表尾插入数据元素
    if (i==last+2)
    {
        data[i - 1] = item;
    }
    else   //在表的其他位置插入数据元素
    {
        //元素移动
        for (int j = last; j >= i - 1;--j)
        {
            data[j + 1] = data[j];
        }
        //将新的数据元素插入到第i个位置上
        data[i - 1] = item;
    }
    //修改表长
    ++last;
}

(7)删除操作

public T Delete(int i)
{
    T tmp = default(T);
    //判断表是否为空
    if (IsEmpty())
    {
        Console.WriteLine("List is empty");
        return tmp;
    }
    //判断删除的位置是否正确
    //i小于1表示删除1个位置之前的元素
    //i大于last+1表示删除最后一个元素后面的第1个位置的元素
    if (i<1||i>last+1)
    {
        Console.WriteLine("Position is error!");
        return tmp;
    }
    //删除的是最后一个元素
    if (i==last+1)
    {
        tmp = data[last--];
        return tmp;
    }
    else  //删除的不是最后一个元素
    {
        //元素移动
        tmp = data[i - 1];
        for (int j = i; j <= last;++j)
        {
            data[j] = data[j++];
        }
    }
    //修改表长
    --last;
    return tmp;
}

  (8)获取元素

public T GetElem(int i)
{
    if (IsEmty()||(i<1) || (i>last + 1))
    {
        Console.WriteLine("List is Empty or Position is error!");
        return default(T);
    }
    return data[i - 1];
}

  (9)按值查找

public int Locate(T value)
{
    //顺序表为空
    if (IsEmty())
    {
        Console.WriteLine("List is Empty!");
        return -1;
    }
    int i = 0;
    //循环处理顺序表
    for (i = 0; i <= last;++i)
    {
        //顺序表中存在与给定值相等的元素
        if (values.Equals(data[i])
        {
            break;
        }
    }
    //顺序表中不存在与给定值相等的元素
    if (i>last)
    {
        return -1;
    }
    return i;
}

三、链表操作

四、实例演练

猜你喜欢

转载自www.cnblogs.com/hxf175336/p/9861309.html