順序表的概念及定義


順序表

結點的概念

結點 :結點是內存中一片由用戶分配的儲存空間,只有一個地址來表示它的存在,沒有顯式名稱。

在學習順序表時,一般不會去特別強調結點的概念,此概念往往在鏈表學習中涉及,但並不代表結點與順序表無關,所以我特意把結點的概念放在此處以加深對順序表的理解。

順序表的概念

定義:把邏輯上相鄰的結點儲存在物理位置上的相鄰儲存單元中,結點的邏輯關系由儲存單元的鄰接關系來體現

通俗來講,順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從指定的儲存位置開始的一塊連續的儲存空間中。

第一個元素的儲存位置就是指定的儲存位置,第 i+1 個元素的儲存位置在第 i 個元素后面

順序表的特性

  • 占用連續的儲存空間:由定義可知順序表的儲存空間必然連續,並且存儲分配只能預先進行,一旦分配完畢,在操作過程中始終不變。
  • 隨機訪問特性:因為儲存空間是連續的,知道第一個元素的地址(即儲存空間的首地址)可以輕松訪問儲存的所有數據。每一個結點對應一個序號,由該序號可以直接算出結點的儲存地址。

順序表三要素

  • 順序表基地址
  • 順序表長度
  • 順序表總空間大小

順序表結構體定義

typedef struct _Sqlist Sqlist;
struct _Sqlist {
  int *elems;         //順序表基地址
  int length;         //順序表長度
  int size;           //順序表總空間大小
};

當然C語言提供了一種簡單的寫法(如下,以后以簡單寫法為例)。

typedef struct{
    int *elems;         //順序表基地址
    int length;         //順序表長度
    int size;           //順序表總空間大小
    
}Sqlist;

在某些書籍上,有這樣定義順序表的

#define MAXSIZE 100
typedef struct {
  int data[MAXSIZE];		//存放順序表元素的數組
  int length;				//存放順序表的長度
}Sqlist;
  • 實際上這種定義已經為順序表開辟了一部分內存空間,而前者需要使用函數來順序表初始化。
  • 但實際上兩種代碼本質上是一樣的,因為前者在順序表的操作——初始化順序表中的函數定義中,我們仍需要分配一片儲存空間並且定義一個存放順序表元素的數組;而后者相當於把這一步合並到了定義中。
  • 在學習過程而非實際開發中,我更傾向於前者,因為這更能反應順序表的三要素,並且與鏈表代碼書寫風格相似,有利於感受線性表思想的共性。

結束

我們現在已經成功定義順序表了,但更重要的是它的操作,所以下一篇文章就來寫這部分內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM