資料結構 三 線性表

2021-10-25 02:20:26 字數 2769 閱讀 9609

零個或多個資料元素的有限序列

在較複雜的線性表中,乙個資料元素可以由諾幹個資料項組成

結構**

#define listsize 100      

//線性表的最大長度

typedef

int datatype;

typedef

struct

seqlist;

datatype是資料元素型別,可以根據需要定義,可以使用seqlist定義資料表型別變數

陣列長度與線性表長度區別:

陣列長度是存放線性表的儲存空間的長度

線性表的長度是線性表中資料元素的個數

順序表的基本操作:

**(1)**按序號查詢(用e返回l中第i個資料元素的值):

#define ok 1

#define error 0

typedef

int status;

status getelem

(sqlist l,

int i,elemtype *e)

*e=l.data[i-1]

;}

**(2)**插入操作(在l中第i個位置之前插入新的資料元素e,l的長度+1)

//判斷順序表是否已滿

else

if(l->length >= listsize)

else

l->data[i -1]

= e;

//將新元素插入

l->length++

;//資料表的長度加1

return ok;

}return0;

}**(2)**刪除操作

優點:無需為表中元素之間的邏輯關係增加額外的儲存空間,可以快速訪問表中任一位置的元素

缺點:

插入和刪除操作需要移動大量元素,當線性表長度變化較大時,難以確定儲存空間的容量,造成儲存空間碎片

分類:單鏈表,雙向鍊錶,迴圈鍊錶

定義:對資料元素a來說,除了儲存其本身的資訊之外,還需要儲存乙個指示其直接後繼的資訊(其中儲存資料的為資料域,儲存直接後繼位置稱為指標域)

注意:要注意區分頭指標和頭結點之間的區別

結構**描述:

typedef

struct node

鍊錶的基本操作:**(1)**讀取(用e返回l中第i個資料元素的值)

status getelem

(linklist l,

int i,elemtype *e)if(

!p||j>i)

return error;

*e=p>data;

return ok;

}

**(2)**插入(在l中第i個位置之前插入新的資料元素e,l的長度加1)

//生成新節點

s=(linklist)

malloc

(sizeof

(node));

. s->data=e;

s->next=p->next;

p->next=s;

return ok;

}**(3)**刪除(刪除l的第i個資料元素,並用e返回其值,l的長度-1)

status listdelete

(linklist *l,

int i,elemtype *e)if(

!(p->next)

||j>i)

retuen 0

; q=p->next;

p->next=q->next

*e=q->data;

free

(q);

return ok;

}

資料結構(三)線性表 順序儲存結構

線性表 1 不同應用,操作不同。2 對於複雜的操作,可以用這些資料的組合來操作。3 介面不同。順序儲存結構及實現 連續儲存單元依次儲存 可通過位置儲存元素 可以隨機訪問 無需額外空間 必須預留空間 各函式只是引數型別不一樣,其功能在本質上完全相同。若能寫一段通用 適用於各種資料型別,則 的可重用性大...

資料結構(三) 線性表 順序表,鍊錶

一 線性表概述 線性表是最簡單的一種的資料結構,由若干相同特徵的資料元素組成的有限序列 沒有前驅元素的的結點稱為線性表的頭結點,沒有後繼元素的結點稱為線性表的尾結點 線性表按照儲存元素的結構,可以分為順序表和煉表 二 順序表 2.1基本實現 順序表是在計算機記憶體中以陣列形式存在的線性表結構,即記憶...

資料結構與演算法 三 線性表基礎

2.1 線性表的定義和基本操作 線性表是有序且有限的 2.1.2 存在乙個唯一的被稱為 第乙個 的資料元素 2.2.2 存在乙個唯一的被稱為 最後乙個 的資料元素 2.2.3 除了第乙個元素外,每個元素均有唯一乙個直接前驅 2.2.4 除了最後乙個元素外,每個元素均有唯一乙個直接後繼。線性表 lin...