C 線性表的順序儲存實現及插入 刪除等操作示例

2022-04-07 17:21:22 字數 1630 閱讀 6462

線性表(linear list)是由同一型別元素構成的有序序列的線性結構。線性表中元素的個數稱為線性表的長度;線性表內沒有元素(長度為0)時,稱為空表;表的起始位置稱為表頭,表的結束位置稱為表尾。

線性表的抽象資料型別描述為:

型別名稱:線性表(list)

資料物件集:線性表是由n個元素構成的有序序列(a1到an),其中a1是表的第乙個元素(表頭),an是表的最後乙個元素(表尾)。ai+1稱為ai的直接後繼,ai稱為ai+1的直接前驅,直接後繼和直接前驅反映了元素之間一對一的鄰接邏輯關係。

操作集:對於乙個具體的線性表l,其內部有表示位序的整數i以及和其對應的元素x。

線性表的順序儲存是指在記憶體中用位址連續的一塊儲存空間順序存放線性表的各元素。在程式語言中,一維陣列在記憶體中占用的儲存空間就是一組連續的儲存區域,因此,用一維陣列來表示順序儲存的資料區域是再適合不過了。

考慮到線性表的操作有插入、刪除等,及表的長度是動態可變的,因此,陣列的容量需設計得足夠大。假設用data[maxsize]表示,其中maxsize是乙個根據實際問題定義的足夠大的整數,線性表中的資料從data[0]開始順序存放。由於當前線性表中的實際元素可能未達到maxsize多個,因此需要用乙個變數last來記錄當前線性表中最後乙個元素在陣列中的位置。即last起乙個指標(實際是陣列下標)的作用,始終指向線性表的最後乙個元素。表空時last = -1。

如下圖所示,若當前表長為last +1,資料元素a0,a1......an分別儲存在data[0]到data[last]之間。

typedef struct lnode* list;

struct lnode

;

//建立線性表並初始化為空

list makeempty()

//返回指定位置的元素值

int findkth(list l, int p)

//尋找線性表中第乙個x的下標

int find(list l, int x)

}

插入元素時,先將線性表長度向後擴充套件1個元素長,之後將要插入位置及其後面的所有元素均向後移動一位,空出位置後再將新元素插入。

//在下標為p的位置插入x

bool insert(list l, int p, int x)

l->data[p] = x;//在空出的p位置插入新的元素

return true;

}

將相應位置元素刪除後,原來在其後面的元素均向前移動一位,空出最後乙個位置,最後將線性表長度減去1個元素長,刪去線性表空餘的位置。

//刪除下標為p的元素

bool delete(list l, int p)

l->lastposition--;//成功刪除原位置為p的元素,線性表長度減1

return true;

}

//返回線性表l長度

int length(list l)

C 實現線性表的順序儲存(順序表)

關於資料結構中的 線性表 佇列 棧 的相關講解,請看 c 實現資料結構中的線性表 typedef int elementtype define maxsize 10 struct sequence typedef int element type define maxsize 10 include ...

順序儲存線性表實現

在計算機中用一組位址連續的儲存單元依次儲存線性表的各個資料元素,稱作線性表的順序儲存結構。順序儲存結構的主要優點是節省儲存空間,因為分配給資料的儲存單元全用存放結點的資料 不考慮c c 語言中陣列需指定大小的情況 結點之間的邏輯關係沒有占用額外的儲存空間。採用這種方法時,可實現對結點的隨機訪問,即每...

線性表 順序儲存實現

linearlist.h pragma once const int maxsize 20 typedef int datatype class dataarr class linearlist linearlist.cpp include linearlist.h include using na...