データ構造線形テーブルシーケンシャルストレージ構造とメインアルゴリズムの実装

(1)線形テーブルの定義。

0個以上のデータ要素の有限シーケンス
ここに写真の説明を挿入

シーケンス線形テーブルには、直接の後続要素、1つだけの直接の後続要素、および1つだけの直接の先行要素があります。データ要素間の関係は1対1の関係です。

一般的なリスト操作:

操作

InitList(*L)://初始化操作,简历一个空的线性表L
ListEmpty(L)://若线性表为空,返回true,否则返回Falser
GetElme(L,i,e)://将线性表L中的第i个位置元素值返回给e
LocateElme(L,e)://在线性表中L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中的序号表示成功;否则,返回0表示失败
ListInsert(*L,i,e)://在线性表L中的第i个位置插入新元素e
ListDelete(*L,i,*e)://删除线性表中L中第i个位置元素,并用e返回其值
ListLength(L)://返回线性表L的元素个数

(2)線形

テーブルの順次ストレージ構造と、検索、挿入、削除アルゴリズムなどの主要なアルゴリズムの実装。

定義:線形テーブルの順次ストレージ構造とは、線形テーブルのデータ要素を、連続するアドレスを持つストレージユニットのセクションとともに一度に格納することを指します。
ここに写真の説明を挿入

シーケンシャルストレージ方式:メモリ空間を占有の形で占有し、同じデータタイプのデータ要素を1次元配列で順番に格納してシーケンシャルストレージ構造を実現します。

#define MAXSIZE 20  /*储存空间初始分配量*/
typedef int ElemType;/*ElemType类型根据实际情况而定,假设为int*/
typedef struct {
    
    
ElemType data[MAXSIZE]/*据存储数据元素,最大值为MAXSIZE*/
int length;  /*线性表当前长度*/
}
sqlist;

*ストレージスペースの開始位置:アレイデータ、その保存場所はストレージスペースの保存場所です

*線形テーブルの最大ストレージ容量:アレイの長さMaxSize

*線形テーブルの現在の長さ:長さ

シーケンシャルストレージ構造の挿入と削除:

要素の取得操作:GetElem操作を実装するには、線形テーブルのi番目の位置要素の値を返します。

#define OK1
#define ERROR 0
#define TRUE 1
#define FALSE 
typedef int status;
/*status是函数的数据类型,其值是函数结构状态代码,如OK等*/
/*初始条件:顺序线性表L一存在,1<=i<=ListLength(L)*/
/*操作结构:用e返回L中第i个数据元素的值*/

線形テーブルシーケンスストレージ構造の挿入操作:

線形テーブルの挿入操作は、線形テーブルのi番目のデータ要素の前に新しいデータ要素nを挿入することを指します。

挿入アルゴリズムのアイデア:

挿入アルゴリズムの時間の複雑さ:

ここに写真の説明を挿入

時間の複雑さの導出は、挿入操作の平均時間の複雑さがO(n)であることを示しています。

*挿入位置が適切でない場合は、例外をスローします

*線形テーブルの長さが配列の長さ以上の場合、例外がスローされるか、容量が動的に増加します

*最後の要素から開始してi番目の位置まで前方に移動し、それらをすべて1つ後方に移動します。

*位置ioutに挿入する要素を入力します

*テーブルの長さプラス1

/*初始条件:顺序线性表L以存在1<=i<=ListLength(L),*/
/*操作结构:在L中第i个位置之前插入新的数据元素e,L的长度加1*/
status ListInsert(Sqlist *L,int i,ELemType e){
    
    
int k;
if(L->length==MAXSIZE)/*顺序线性表已经满*/
return ERROR;
if(i<=L->length)/*若插入数据位置不在表尾*/
{
    
    
for(k=L->length-1;k>=i-1;k--/*将要插入位置后数据元素向后移动一位*/
L->data[k+1]=L->data[k];
}L->data{
    
    i-1]=e;/将新元素插入*/
L->length++;
return OK;
}

線形テーブルの順次ストレージ構造の削除:線形テーブルの削除は、テーブル内のi番目のデータ要素(0 <= i <= n-1)の削除を指し、長さnの線形テーブルは長さn-1になります。の線形テーブル、i +1番目からn-1番目の要素を1つ前に移動する必要があります

削除アルゴリズムのアイデア:

削除アルゴリズムの時間の複雑さ:
ここに写真の説明を挿入

時間の複雑さの導出は、削除操作の平均時間の複雑さもO(n)であることを示しています。

*削除位置が不合理な場合は、例外をスローします

*要素の削除と削除

*削除された要素の位置から最後の要素の位置まで、すべてを1つ前に移動しないでください

*テーブルの長さから1を引いたもの

線形テーブルの順次ストレージ構造の特性:

利点:

*テーブル内の要素間の論理関係を表現し、ストレージスペースを追加するために無秩序

*テーブル内の任意の位置にある要素にすばやくアクセスできます

短所:

*挿入および削除操作では、多くの要素を移動する必要があります

※リニアテーブルの長さが大きく変化すると、収納スペースの容量がわかりにくくなります。

*ストレージスペースの「断片化」を引き起こします

おすすめ

転載: blog.csdn.net/weixin_45743004/article/details/103303450
おすすめ