1. 程式人生 > >數據結構之線性表(一)

數據結構之線性表(一)

不存在 ear public 線性結構 turn 過程 結構 length class

一、線性表的特性

  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;
}

三、鏈表操作

四、實例演練

數據結構之線性表(一)