線性表-順序表C語言實現

kk-zkx發表於2020-09-28

什麼是線性表

線性表,全名為線性儲存結構。使用線性表儲存結構的方式可以理解,即“把所有的資料都用一根線串起來在儲存到物理空間中”。

資料的“線性”結構
在這裡插入圖片描述

順序儲存結構和鏈式儲存結構

  • 將資料依次儲存在連續的整塊物理空間中,這種儲存結構稱為順序儲存結構,(簡稱順序表);
  • 資料分散的儲存在物理空間中,通過一根線儲存他們之間的邏輯關係,這種儲存結構稱為鏈式儲存結構;(簡稱連結串列);

前驅和後繼

資料結構中,一組資料中的每個個體被稱為“資料元素”(簡稱元素)。

  • 某一元素的左側相鄰的元素稱為“直接前驅”,位於此元素左側所有的元素都稱為“前驅元素”
  • 某一元素的右側相鄰的元素稱為“直接後繼”,位於此元素右側所有的元素都稱為“後繼元素”

在這裡插入圖片描述

順序表(順序儲存結構)及初始化詳解

順序表儲存資料時,會提前申請一整塊足夠大小的物理空間,然後將資料依次儲存起來,儲存時做到資料元素之間不留一絲縫隙。

順序表的初始化

順序表儲存資料之前,除了申請足夠大的儲存空間之外,還要記錄一下資料

  1. 順序表申請的儲存容量
  2. 順序表的長度,也就是表中儲存元素的個數
提示:正常狀態下,順序表申請的儲存容量要大於順序表的長度。

順序表C語言實現程式碼:


//順序表自定義
typedef struct Table{
    int * head;    //宣告瞭一個名為head的長度不確定的陣列,也叫動態陣列
    int length;    //記錄當前順序表的長度 
    int size;      //記錄順序表分配的儲存容量
}table;

/*順序表初始化
1、給Head動態資料申請足夠大小的物理空間
2、給size、length賦初值
*/
#define Size 5  //對Size進行巨集定義,表示順序表申請大小
table initTable()
{
    table t;
    t.head=(int*)malloc(Size*sizeof(int)); //構造一個空順序表,動態申請儲存空間
    if(!t.head)     //出國申請失敗,提示並退出程式
    {
        printf("初始化失敗!\n");
        exit(0);
    }
    t.length=0;   //空表的長度為0
    t.size=Size;  //空表的初始化儲存空間大小為Size
    return t;
}

/*
通過在主函式中呼叫 initTable 語句,就可以成功建立一個空的順序表,
與此同時我們還可以試著向順序表中新增一些元素,C 語言實現程式碼如下:
*/

#include<stdio.h>
#include<stdlib.h>
#define Size 5

typedef struct Table{
    int * head;    //宣告瞭一個名為head的長度不確定的陣列,也叫動態陣列
    int length;    //記錄當前順序表的長度 
    int size;      //記錄順序表分配的儲存容量
}table;

table initTable()
{
    table t;
    t.head=(int*)malloc(Size*sizeof(int)); //構造一個空順序表,動態申請儲存空間
    if(!t.head)     //出國申請失敗,提示並退出程式
    {
        printf("初始化失敗!\n");
        exit(0);
    }
    t.length=0;   //空表的長度為0
    t.size=Size;  //空表的初始化儲存空間大小為Size
    return t;
}

 void diaplayTable(table t)
{
     for(int i=0;i<t.length;i++)
     {
         printf("%d ",t.head[i]);
     }
     printf("\n");
}

int main()
{
    table t=initTable();
    for(int i=0;i<t.size;i++)
    {
        t.head[i]=i;
        t.length++;
    }
    printf("順序表中儲存的元素分別是:\n");
    displayTable(t);
    return 0;
}

相關文章