資料結構之順序表(C語言實現)

2021-10-22 23:46:12 字數 3215 閱讀 7318

table of contents定義

實現定義結構

定義操作建立順序表

初始化順序表

插入元素

刪除元素

銷毀順序表

資料結構是相互之間存在一種或多種特定關係的資料元素的集合。根據資料元素之間關係的不同特性,通常有如下4類基本結構:

順序表的特徵是,在記憶體中占用連續的儲存單元,可以簡單的理解為順序表就是陣列。只是根據需要,在實際應用中動態分配順序表占用的記憶體單元。而陣列是在編譯的時候,預分配了指定大小的記憶體單元,因此如下**段會在編譯的時候報錯。

int len = 10;

char arr[len];

但是順序表又會有資料全部的特點:可以根據下標直接訪問、不方便插入和刪除元素(因為需要移動後續的元素)。

typedef int seqtype; //儲存單元型別

typedef struct sqlist;

結構體內,有三個元素:儲存空間基位址,類似於陣列首位址;當前長度,記錄順序表中有效儲存單元個數;當前分配的儲存容量,順序表中,最多容納的儲存單元個數。當順序表中所有儲存單元已經被使用,在下次插入元素之前,需要新增儲存單元。這點是陣列所不具有的特性。

/**

* 建立順序表

*/sqlist createlist_sq()

這裡提供兩種建立順序表的**,一種是由系統分配list占用的記憶體,一種是自己動態分配的記憶體,需要在程式執行之前手動釋放占用的記憶體空間。

/**

* 初始化順序表

* 返回1 表示初始化成功

* 返回0 表示初始化失敗

*/int initlist_sq(sqlist &l)

分配順序表的儲存單元,初始化順序表屬性的值。

/**

* 插入順序表

* 下標是負數就插入到結尾

*/int insertlist_sq(sqlist &l, int index, seqtype val)

if (index < 0) //下標是負數,插入到結尾

index = l.length;

if (l.length == l.listsize)

l.elem = newbase;

l.listsize += listincrement;

}//尋找合適的插入位置,index後面的元素向後移動

for (int i = l.length; i > index; i--)

l.elem[index] = val; //插入元素

l.length++;

return 1;

}

將元素插入到指定的位置。插入之前,需要先判斷順序表中是否已經存滿,再根據需要新增儲存單元,最後插入元素。

/**

* 插入順序表(結尾的位置)

* 與上面的函式是重名函式,這叫函式過載,在c++裡面支援

*/int insertlist_sq(sqlist &l, seqtype val)

*引用和過載,是c++中才支援,因此需要在cpp檔案中編譯。

/**

* 刪除指定的元素

* 返回0 找不到指定的元素,刪除失敗。

* 返回1 找到待刪除的元素,刪除成功。

*/int removelist_sq(sqlist &l, seqtype val)

}if (index < 0)

return 0;

for (; index < l.length - 1; index++)

l.length--;

return 1;

}

刪除指定元素,需要先找到下標。依次移動下標後面的結點,修改length值。

/**

* 根據下標刪除是指定的結點,並返回元素的值

* 返回0 下標超出順序表長度,刪除失敗。

* 返回1 下標正確,刪除元素,並且將已刪除元素值轉給elem

*/int removelist_sq(sqlist &l, int index, seqtype &elem)

l.length--;

return 1;

}

先取到指定下標的元素,賦值給elem,然後依次移動下標後面的結點。最後修改length值。

/**

* 銷毀順序表

*/void destorylist_sq(sqlist &l)

重點釋放順序表的儲存單元。如果順序表自身的記憶體也是動態分配的,需要手動釋放。

最後附上,標頭檔案的定義。

/*

* sqlist.h

* * 線性表的順序儲存

*  created on: 2023年8月30日

*      author: flueky

*/#ifndef sqlist_h_

#define sqlist_h_

#define list_init_size 50

#define listincrement 10

typedef int seqtype; //儲存單元型別

typedef struct sqlist;

/** * 建立順序表

*/sqlist createlist_sq();

/** * 初始化順序表

*/int initlist_sq(sqlist &);

/** * 插入順序表

*/int insertlist_sq(sqlist &,int index,seqtype);

/** * 插入順序表(結尾的位置)

*/int insertlist_sq(sqlist &,seqtype);

/** * 在順序表中移除指定位置元素,下標從0開始

*/int removelist_sq(sqlist &,int,seqtype &);

/** * 在順序表中刪除指定元素

*/int removelist_sq(sqlist &,seqtype);

/** * 銷毀順序表

*/void destorylist_sq(sqlist &);

#endif /* sqlist_h_ */

摘自嚴蔚敏版《資料結構》

資料結構 順序表(C語言實現)

順序表的定義是 把線性表中所有表項按照其邏輯順序依次儲存到從計算機儲存中指定儲存位置開始的一塊連續的儲存空間中。這樣,線性表中第乙個表項的儲存位置就是被指定的儲存位置,第i個表項 2 i n 的儲存位置緊接在第i 1個表項的儲存位置的後面。假設順序表中每個表項的資料型別為t,則每個表項所占用儲存空間...

C語言實現順序表 資料結構

include include 需求,寫乙個順序線性表,儲存乙個位址位置 define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 define true 1 define false 0 define ...

資料結構 順序表(C語言實現)

順序表是用一段實體地址連續的儲存單元依次儲存資料元素的線性結構,一般情況下採用陣列儲存。在陣列上完成資料的增刪查改。順序表一般可以分為靜態順序表 使用定長陣列儲存 和動態順序表 使用動態開闢的陣列儲存 本次實現的是動態順序表,具體 如下 common.h include include includ...