零個或多個資料元素的有限序列
在較複雜的線性表中,乙個資料元素可以由諾幹個資料項組成結構**:
#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...