抽象データ型線形テーブルの定義
ADT List
{
数据对象
数据关系
基本操作
IniList(&L) //构建空表L
ListLength(&L) //求表L的长度
GetElem(L,i,&e) //去元素ai 由e返回ai
PriorElem(L,ce,&pre_e) //求ce的前驱,由pre_e返回
InsertElem(&L,i,e) //在元素ai之气插入新元素e
DeleteElem(&L,i) //删除第i个元素
EmptyList(L) //判断L是否为空表
}ADT List
テーブルLのi番目のデータ要素を次のように削除します。
L = (a1,a2,...,ai-1.ai..,an)
若删除 表中i的元素
记作 DeleteElem(&L,i)
若删除 表中x的元素
记作 DeleteElem(&L,x)
//
若ai = x 优先删除ai
要素aiの前に新しい要素eを挿入します
InsertElem(&L,i,e)
L= (ai,a2,....,ai-1,e,ai,...)
検索—要素値(またはデータ項目値がeである要素)を決定します
。L=(a1、a2、…、ai、…an)が与えられた
場合、要素eにai = eが含まれている場合、検索は成功します。検索が失敗する
5.並べ替え
-要素値またはデータ項目値の昇順(または降順)に従って、リスト内の各要素の位置を再配置します。
例:並べ替え前L =(90,60 ...)
並べ替え後:L =(10、20、30、60)
6.テーブルLaとテーブルLbをテーブルLc
に結合して設定されたテーブルシーケンスに:
La =(2,14,20,45,80)
Lb =(8,10,19,20,22,85,90)
結合されたテーブル
Lc =(2、8、10、14、19、20)
7.テーブルLaをテーブルLbにコピーしますLa
=(2,14,20,45,80)
Lb =(2,14,20,45,80)
線形テーブルのシーケンシャル表現(シーケンシャルストレージ構造)
2.2.1シーケンシャル配布----
コンピュータのメモリに連続したアドレスを持つストレージユニットのグループに線形テーブルのデータ要素を保存します。この配布方法はシーケンシャル配布と呼ばれます。、またはシーケンシャル画像。結果のストレージ構造またはベクトル(1次元配列)
lたとえば、
線形テーブルa =(30,40,10,55,24,80,66)
静的な1次元配列定義int a [11];
a [0 ] 30 a [1] 40 a [2] 55
シーケンスストレージ構造の一般的な形式:
シーケンス番号ストレージ状態ストレージアドレス
1 a1 b
2 a2 b + q
i ai b +(i-1)* p
… na b +(
n-1)* p
maleng b +(maxleng-1) * p
bは、最初のアドレス/ベースアドレス要素のアドレスai
p -------------- 1つのデータ要素
maxlengが占有するストレージユニットの数------------- ----最大長、定数
C言語での線形テーブルシーケンス構造の定義
#define maxleng 100
{
ElemType la[maxleng + 1]; / / 下标 0 1 maxleng
int length; //当前长度
int last; //an的位置
}
C言語での線形テーブルの順次構造の定義(静的割り当て)
例2:要素が占めるスペースとテーブルの長さは、C言語の構造タイプにマージされます。
#define maxleng 100
typedef struct
{
Elemtype elem[maxleng];//小标 0,1,... ,maxleng-1
int length;
}SqList;
SqList La;
その中で、typedef-alias定義、SqList-構造型名
La ----構造型変数名
La.length -----テーブル長
La.elem [0] ------ a1
La.eleml [La 、長さ-1] ---- an
C言語で定義された配列構造リニアテーブル(動的に割り当てられる)
の#define LIST_INIT_SIZE 100
の#define LISTINCREMENT 10
のtypedef構造体
{ Lbは- }