漫談資料結構 二 線性表1

2021-09-10 05:38:24 字數 3899 閱讀 7686

1.1 定義

線性表是具有相同型別元素組成的乙個線性序列。元素的個數即為元素的長度,元素為0時稱為空表。如下:

(a,b,c,d,e,f,g)

這就表示乙個線性表。

1.2 特徵

有且只有乙個頭結點,頭結點沒有前驅結點。

有且只有乙個尾結點, 尾結點沒有後繼節點。

除頭尾結點外,其他結點都有乙個前驅結點和後繼節點。

1.3 儲存特徵

線性表的儲存結構分為順序儲存和鏈式儲存,它們都具有如下特點:

唯一性:乙個線性表只能儲存一種型別的元素

1.4 基本操作

建立 create()

初始化 init()

新增資料 adddata()

獲取長度 getlength()

獲取指定元素 get()

插入 insert()

刪除 delete()

清空表 clear()

這8種只是線性表的最基本操作,如果想要高階,請自己谷歌。

資料被儲存在指定長度的連續儲存單元,通過對應的索引(一般從0開始)找到對應的元素。在高階語言中,順序儲存可以用陣列表示。

前面提到過線性表的順序儲存查詢效率高,插入和刪除效率低。適合儲存需要連續訪問的資料。

2.1.1 建立順序表並初始化

使用結構體建立乙個結點,這個結點儲存了這個順序表的基本資訊,包括capacity,length,node。為了簡單起見,只儲存整形資料,其中用到了malloc和memset函式 ,**如下:

#include

#include

#include

//建立結點

typedef

struct seqlist hseqlist;

//建立順序表

hseqlist *

createseqlist

(int capacity)

memset

(head,0,

sizeof

(hseqlist));

//清空頭結點

head->capacity = capacity;

head->length =0;

head->node =

(int*)

malloc

(sizeof

(void*)

*capacity);if

(head->node ==

null

)return head;

}

2.1.2 獲取長度,容量並且封裝列印方法。
//求順序表容量

intgetcapacity

(hseqlist * list)

temp = list;

return temp->capacity;

}//求順序表長度

intgetlength

(hseqlist * list)

temp = list;

return temp->length;

}//輸出

void

print

(hseqlist * list)

int length =

getlength

(list)

;int i;

printf

("[");

for(i=

0;i1;i++

)printf

("%d]\n"

,list->node[i]);

}

2.1.3 新增資料
//新增資料

intadddata

(hseqlist * list,

int data)

if(list->length>=list->capacity)

int index = list->length;

list->node[index]

= data;

list->length++

;return1;

}

2.1.4 插入

如果要在順序表中插入資料,則需要將該位置後的所有元素往後移動。

例如,在[a,b,c,d,e,f]中把g插入到第二個位置。要先移位然後插入。如圖所示:

**如下:

//插入

intinsert

(hseqlist *list,

int data,

int pos)

if(list->length>=list->capacity)

//如何插入位置在length之前,則預設插入到最後一位

if(pos>list->length)

//從後往前移位,防止資料丟失

for(i=list->length;i>pos;i--

)//插入資料

list->node[i]

= data;

//增加長度

list->length ++

;return1;

}

2.1.5 刪除

刪除指定位置的元素後,該位置往後的元素依次往前移動。

delete

(hseqlist *list,

int pos)

if(list->length <=0)

if(pos <

0|| pos >list->length)

int i;

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

list->length--

;return1;

}

2.1.6 查詢某個位置上的指定元素

//查詢某個位置上的指定元素

intgetdata

(hseqlist *list,

int pos)

if(pos <

0|| pos >=list->length)

return list->node[pos]

;}

2.1.7 清空表

//清空表

intclear

(hseqlist *list)

list->length =0;

memset

(list->node,0,

(list->capacity *

sizeof

(void*)

));return1;

}

2.1.8 測試**

int

main()

print

(list)

;printf

("insert:\n");

insert

(list,

100,3)

;print

(list)

;printf

("delete:\n");

delete

(list,3)

;print

(list)

;printf

("getdata:\n");

printf

("index %d is %d\n",0

,getdata

(list,0)

);printf

("clear:\n");

clear

(list)

;print

(list)

;return0;

}

輸入結果:

原始碼位址

資料結構(二) 線性表

線性表是最簡單最常用的資料結構,是一種典型的線性儲存結構。定義 線性表是由n n 0 個資料元素 結點 a1 a 2 an 組成的有限序列。n為表的長度。當n 0,為 空表 n 0時,為 a1,a 2,an 邏輯特徵 非空的線性表只有乙個頭結點,也只有乙個終結點,頭結點只有乙個直接後繼結點,而沒有直...

資料結構實驗二 線性表

一 實驗目的 鞏固線性表的資料結構,學會線性表的應用。1.回顧線性表的邏輯結構,線性表的物理儲存結構和常見操作。2.學習運用線性表的知識來解決實際問題。3.進一步鞏固程式除錯方法。4.進一步鞏固模板程式設計。二 實驗內容 1.建立乙個n個學生成績的順序表,對錶進行插入 刪除 查詢等操作。分別輸出結果...

ZJU資料結構 二 線性表

線性表 由同型別資料元素構成有序序列的線性結構 表中元素個數稱為線性表的長度線性表沒有元素時,稱為空表表起始位置稱為表頭,表結束為止稱為表尾型別名稱 線性表 list 資料物件集 線性表是n 0 個元素構成的有序序列 a1,a2,an 操作集 線性表l list,整數i表示位置,元素x elemen...