ZJU資料結構 二 線性表

2021-09-28 13:33:19 字數 3811 閱讀 8361

「線性表」:由同型別資料元素構成有序序列的線性結構

表中元素個數稱為線性表的長度線性表沒有元素時,稱為空表表起始位置稱為表頭,表結束為止稱為表尾型別名稱:線性表(list)

資料物件集:線性表是n(≥0)個元素構成的有序序列(a1,a2,…,an)

操作集:線性表l ∈ list,整數i表示位置,元素x∈ elementtpye,線性表的基本操作有:

1、list makeempty():初始化乙個空線性表l;

2、elementtype findkth(int k,list l):根據位序k,返回相應元素;

3、void insert(elementtype x,int i,list l):在位序i前插入乙個新元素x;

5、void delete(int i,list l):刪除指定位序i的元素;

6、int length(list l):返回線性表l的長度n。

利用陣列的連續儲存空間順序存放線性表的個元素

注:順序儲存中i是序號的下標,從0開始

標頭檔案命令及結構體格式

#include

#define maxsize 100

//maxsize定義為data陣列的大小

typedef

struct lnode*list;

struct lnode

;struct lnode l;

list ptrl;

//訪問下標為i的元素:l.data[i]或者ptrl->data[i]

//線性表的長度:l.last+1或者ptrl->last+1

主要操作的實現:
//初始化(建立空的順序表)

list makeempty()

//按值查詢

intfind

(elementtype x,list l)

//elementtype 可以為任意型別

//插入操作實現

void

insert

(elementtype x,

int i,list l)

//elementtype 可以為任意型別

if(i<

1||i>l->last+2)

for(j=p->last;j>=i-

1;j--

) l->data[j+1]

=l->data[j];//從後往前挪乙個,給a[i]騰出位置

l->data[i]

=x;//新元素插入

l->last++

;//last仍然指向最後元素

return

;}

//刪除(刪除表的第i(l<=i<=n)個位置上的元素)

void

delete

(int i,list l)

for(j=i,j<=l->last;j++

)//從前往後依次向前挪乙個,將a[i]覆蓋了

l->data[j-1]

=l->data[j]

; l->last--

;return

;// last仍然指向最後元素

}

//按序查詢

elementtype findkth

(int k,list l)

return l->data[k]

;}

//求表長

intlength

(list l)

//test

intmain()

不要求邏輯上相鄰的兩個元素物理上也相鄰;通過「鏈」建立起資料元素之間的邏輯關係。

標頭檔案命令及結構體格式

#include

#include

typedef

struct elementtype;

//elementtype可以定義為任意型別

typedef

struct lnode*list;

struct lnode

;struct lnode l;

list l;

主要操作的實現:
//初始化鍊錶

list makeempty()

//以遍歷鍊錶的方法求鍊錶長度

intlength

(list l)

return j;

}

//按序號查詢

list findkth

(int k,list l)

if(i==k)

return p;

//找到第k個,返回指標

else

return

null

;//否則返回空值

}

//按值查詢

list find

(elementtype x,list l)

//插入

list insert

(elementtype x,

int i,list l)

p=findkth

(i-1

, l)

;//查詢第i-1個結點

if(p==

null

)//第i-1個結點不存在

else

}

//刪除

list delete

(int i,list l)

p=findkth

(i-1

,l);

//查詢第i-1個結點

if(p==

null

||p->next==

null

)else

}

//輸出鍊錶元素

void

print

(list l)

if(flag)

printf

("null");

printf

("\n");

}//8.測試

intmain()

1. 兩個有序鍊錶序列的合併 這是一道c語言函式填空題,訓練最基本的鍊錶操作。一定要做;

2. 一元多項式的乘法與加法運算 在「小白專場」裡,我們會詳細討論c語言實現的方法。本題一定要做;

3. reversing linked list 根據某大公司筆試題改編的2023年春季pat真題,不難,可以嘗試;

4. pop sequence pop sequence 是2023年pat春季考試真題,考察隊堆疊的基本概念的掌握,應可以一試。

資料結構(二) 線性表

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

資料結構實驗二 線性表

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

資料結構複習二 線性表

寫在前面 考完離散就剩兩天覆習資料結構,還有七章,我可能要沒了 衝衝衝!定義是 由n 0 個資料特性相同的元素構成的有限序列n 0時為空表 非空線性結構的特點 1 第乙個 元素唯一 2 最後乙個 元素唯一 3 除第乙個之外,資料結構中的每個資料元素均只有乙個前驅 4 除最後乙個之外,每個資料元素均只...