線性表的順序儲存(順序表)

2021-08-13 13:59:05 字數 3274 閱讀 1508

順序儲存的原理:

1.首先,什麼是線性表?顧名思義,線性表就是由零個或多個資料元素的有限序列。

2.所謂順序儲存,就是在儲存器中分配一段連續的儲存空間,邏輯上相鄰的資料元素,其物理儲存位址也是相鄰的。

3.應該注意的是,表的長度未必與容量相同,表的長度要小於等於表的容量。

4.在順序儲存中,只要確定了線性表在儲存空間裡的起始位置,線性表中的任意元素就都可隨機訪問,所以線性表的順序儲存結構是一種隨機訪問的結構,在高階語言中,順序儲存就是用陣列來實現的。

5.在順序儲存中,系統不需要為表元素之間的邏輯關係增加額外的儲存空間,而且在訪問元素時,它可以根據給出的下標快速計算出元素的儲存位址,從而達到隨機讀取的目的。

6.一般,不建議在順序表中插入或刪除元素,因為效率會很低。

順序儲存的實現:

1.建立順序表:

首先需要建立乙個頭結點來存放順序表的長度,大小和位址等資訊,然後再建立順序表,同時將順序表的位址儲存在頭結點中:

具體實現思路如下:

(1)定義乙個struct來儲存順序表資訊;

(2)為頭結點分配空間;

(3)為順序表分配空間,將順序表空間位址儲存在頭結點中;

(4)將頭結點位址返回給呼叫者。

**實現如下:

typedef

struct _tag_seqlist //頭結點,記錄表的資訊

tseqlist;

//建立順序表

seqlist *seqlist_create(int capacity) //返回值為seqlist *型別,即順序表的位址

memset(temp, 0, sizeof(tseqlist));

temp->capacity = capacity;

temp->length = 0;

temp->node = (int *)malloc(sizeof(void*)*capacity);//分配乙個指標陣列

if (temp->node == null)

return temp; //將分配好的順序表的位址返回

}

2.求順序表容量:

在實現順序表時,一般將順序表資訊儲存在頭結點中,因此求順序表容量時,可以直接從頭結點中獲取。

**實現如下:

int seqlist_capacity(seqlist *

list)

temp = (tseqlist *)list;

return temp->capacity;

}

3.求順序表長度:

和求順序表的容量一樣,求順序表大小也是從頭結點中獲取資訊

**實現如下:

int seqlist_length(seqlist *

list)

temp = (tseqlist *)list;

return temp->length;

}

4.插入元素:

增刪改修是資料結構的核心操作,每種資料結構都要實現這幾種最基本的操作。

當順序表已滿時,表中的元素無法向後移動,需要作出特別處理(例如不插入,或者新開闢一塊更大的空間來儲存這些元素)。

當插入的位置在空閒區域時,需要作出相應處理。

**實現如下:

int seqlist_insert(seqlist *list, seqlistnode* node, int pos)//引數為順序表位址,要插入的元素位址,插入位置

temp = (tseqlist*)list;

//如果順序表已滿

if (temp->length >= temp->capacity)//如果順序表為空,或者結點為空

//容錯

if (pos > temp->length) //如果給出的pos在長度後,即中間有空餘,就修正到最後乙個元素後面

for (i = temp->length; i > pos; i--) //將插入位置的元素依次後移

temp->node[i] = (int)node; //然後在騰出來位置插入新元素結點

temp->length++; //插入成功後,長度加1

return

0;}

5.刪除元素:

從順序表中刪除某個元素,則將元素刪除後,需要將後面的元素依次向前移動來補齊空位。

**實現如下:

seqlist *seqlist_delete(seqlist *list, int

pos)

temp = (seqlistnode *)tlist->node[pos];

for (i = pos + 1; i < tlist->length; i++)

tlist->length--;

return temp;

}

6.查詢某個位置上的元素:

因為順序表在底層是以陣列來實現的,每個儲存單元都有索引標註,要查詢某個位置上的元素,直接按索引來查詢即可。

**實現如下:

seqlist *seqlist_get(seqlist *list, int

pos)

temp = (seqlistnode *)tlist->node[pos]; //將表中pos位置的結點指標賦給temp

return temp;

}

7.清空表:

清空順序表是將表中的內容全部置為0.

**實現如下:

void seqlist_clear(seqlist*

list)

temp = (tseqlist *)list;

temp->length =

0; memset(temp->node, 0, (temp->capacity*sizeof(void

*)));//將順序表全部歸0

return;

}

8.銷毀表:

銷毀順序表是將表整個銷毀。

**實現如下:

void seqlist_destory(seqlist *

list)

temp = (tseqlist *)list;

if (temp->node !=

null)

free(temp); //再釋放頭結點

return;

}

線性表的順序儲存 順序表

一丶順序表 概念 採用順序儲存的線性表稱為順序表,順序表中邏輯上相鄰的資料元素在物理儲存位置上也是相鄰的。二丶定義順序表 用一維陣列來描述順序表的資料儲存。由於順序表有插入刪除等操作,即順序表的表長會發生改變。因此是陣列長度足夠大,加入整型變數length來記錄此時線性表中資料元素的個數,順序表的結...

線性表的順序儲存 順序表

線性表,簡稱表,是n n 0 個具有相同型別的資料元素的有限序列。1 線性表是乙個相當靈活的資料結構,對線性表的資料元素不僅可以進行訪問訪問,還可以進行插入和刪除等操作。2 a1稱為第1個元素,an稱為最後乙個元素,任意一對相鄰的資料元素a i 1 和a i 1序偶關係 且a i 1 稱為a i 的...

線性表的順序儲存 順序表

線性表可以按照其儲存結構劃分為順序表 鍊錶。如下圖 順序表 順序表的描述 1 陣列靜態分配 define maxsize 30 typedef int elemtype typedef structsqlist 2 陣列動態分配 define maxsize 30 typedef int elemt...