1. 程式人生 > >資料結構學習筆記——線性表之順序表(c語言實現)

資料結構學習筆記——線性表之順序表(c語言實現)

1.概念

順序表即線性表的順序儲存結構 ,指的是用一段地址連續的儲存單元依次儲存線性表資料元素。線上性表中,每個資料元素的型別都相同,一般可以用一維陣列來實現順序儲存結構。 在這裡插入圖片描述

2.實現

(1)建立順序表的結構

利用c語言結構體來建立順序表的結構,順序表結構體中包含資料和表長。

  #define MAXSIZE 10      //儲存空間初始分配量
    typedef int ElemType;   //定義型別,此處為int(可變)
    typedef int Status;
    typedef struct
    {
        ElemType data[MAXSIZE];//建立陣列儲存空間
        int length;            //線性表當前長度
    }sqlist;
(2)初始化表單

初始化一個n長度的順序表並列印,表單資料初始化為1~n,n為函式形參InitLength。

1 2 3 4 5 n

示例程式碼:

void sqlistInit(sqlist *sl,int InitLength)
{
    int j;
    sl->length=0;
    printf("當前表單:");
    for(j=0;j<InitLength;j++)
    {
       sl->data[j]=j+1;
       printf("%d ",sl->data[j]);
       ++sl->length;
    }
     printf("\n初始表單長度:%d\n",sl->length);
}

結果演示: 在這裡插入圖片描述 在這裡插入圖片描述

(3)增:在表中第i個位置增加資料e

在這裡插入圖片描述 示例程式碼:

Status sqlistInsert(sqlist *L,int i,ElemType e)
{
  int k;
  if(L->length==MAXSIZE)//表已滿
    {
     printf("表已滿!\n");
     return error;
    }
  if(i<1||i>L->length+1)//i不在範圍內
    {
     printf("插入位置不在表單範圍內!\r\n\n");
     return error;
    }
  if(i<L->length+1)//插入資料不在表尾
  {
      for(k=L->length;k>=i;k--)//插入位置後資料元素依次向後移動一位
        L->data[k]=L->data[k-1];
  }
  L->data[i-1]=e;//插入新元素
  L->length++;
  return ok;
}

結果演示: 在任意位置插入數字: 在這裡插入圖片描述 也可以在頭部和尾部插入: 在這裡插入圖片描述

(4)刪:刪除表中第i個位置資料

要刪除第i個數據,即將i位置後資料依次左移,表長減一 在這裡插入圖片描述 示例程式碼:

Status sqlistDelete(sqlist *L,int i)
{
  int k;
  if(L->length==0)//空表
    {
     printf("無刪除物件,這是一個空表!\n");
     return error;
    }
  if(i<1||i>L->length)//i不在範圍內
    {
     printf("找不到該刪除物件!\r\n\n");
     return error;
    }
  for(k=i;k<L->length;k++)//第i個位置後資料依次左移
    L->data[k-1]=L->data[k];
  L->length--;
  return ok;
}

結果演示: 刪除第三個數字 在這裡插入圖片描述

(5)改:改變表中第i個位置資料

在這裡插入圖片描述 示例程式碼:

Status sqlistChange(sqlist *L,int i,ElemType e)
{
  int k;
  if(L->length==0)//空表
    {
     printf("無改變物件,這是一個空表!\n");
     return error;
    }
  if(i<1||i>L->length)//i不在範圍內
    {
     printf("找不到該物件!\r\n\n");
     return error;
    }
  L->data[i-1]=e;//改變數值
  return ok;
}

在這裡插入圖片描述

(6)查:查詢表中第i個位置資料,並返回該值

第i個數據即為元素da[i-1],在表單範圍內返回該值即可 示例程式碼:

Status sqlistLocate(sqlist *L,int i)
{
  int k;
  if(L->length==0)//空表
    {
     printf("這是一個空表!\n");
     return error;
    }
  if(i<1||i>L->length)//i不在範圍內
    {
     printf("找不到該物件!\r\n\n");
     return error;
    }
  return L->data[i-1];
}

結果演示: 在這裡插入圖片描述

(7)其他

3.優劣勢分析

優點 缺點
  • 不需要為表中元素之間的邏輯關係而增加額外的儲存空間
  • 可以快速地存取表中任意位置的元素
  • 插入和刪除操作需要移動大量元素
  • 當線性表長度變化較大時,難以確定儲存空間的容量
  • 造成儲存空間的“碎片”及浪費
  • 以上就是對順序儲存結構的線性表的學習及分享。