はじめに:最近esp8266とUCOS-IIIを果たし++、より学習C、主にポインタの接触構造、リンクリスト;だけ(データ構造は、実際には非常に重要であり、学ばなければならないデータ構造で自分自身を見て、アルゴリズムを学んでいます、)ハッハッハ、飛び石要素テーブル操作を追加および削除するために個人的な見解、効率が比較的低い(あなたが他の要素の多くを移動したい)、と私はポインタ操作を使用して、操作の前にリストを書いて、効率がはるかに高いですA。まあ、それは今日の研究の概要を見てください!
まず、初期化シーケンステーブル:
アルゴリズムのステップ:
この点ELEM空間のベースアドレスように動的に、所定の空間的アレイに定義されたサイズに割り当てられた1、Lシーケンステーブル
図2に示すように、テーブルの現在の長さが0に設定されています
擬似コード:
ステータスInitList(SqList&L)は { // 配列の空のリストLを作成 L.elem = 新しい新しい elemType [MAXSIZE]; // ある配列空間のサイズとMAXSIZEシーケンステーブルを割り当て IF!終了(OVERFLOWを(L.elem) ); // メモリ割り当て失敗出口 L.length = 0 ; // 長さ0の空リスト 戻りOK; }
操作の第二に、値:
アルゴリズムのステップ:
無理、エラーが返された場合は1、指定された場所は、合理的な番号i(1 <= l <= L.length)の値か否かが判断されます。
iの値が妥当である場合は2を、次いで、i番目のデータ要素L.elemは[I-1]パラメータeに割り当てられ、それはEによる送信データ要素i番目の値を返します
それはのためのコードです:
ステータスGetElem(SqList L、int型 I、ElemType&E) { 場合(iは< 1 || I> L.length) 戻り EERORと、// 判断I是否合理 E = L.elem [I- 1 ]。 返却OK。 }
第三に、検索操作:
アルゴリズムのステップ:
図1に示すように、最初の要素から出発し、及びeを順次比較し、見つかった同じ素子E L.elem [i]の場合、検索が成功しており、iは+ 1要素のインデックスを返します。
2.全体シーケンステーブルを検索するが見つからない場合は、検索が失敗し、それは0を返します。
擬似コード:
INT LocateElem(SqListのL、elemType電子) { // シリアル番号を返し、シーケンステーブルL Eにおけるデータ要素の値を見つける ために(I = 0 ;私はL.lengthを<; I ++は) { IF(L.elem [I ] == E) リターン Iは+ 1 ; } 戻り 0 ; }
第四に、挿入:
アルゴリズムのステップ:
図1に示すように、挿入位置は、有効I(法定値の範囲1 I <= iが<= N + 1)、有効な戻り場合にエラーか否かを判断します
2、フルならば、それはエラーを返し、テーブル記憶スペースの順序が一杯であるかを決定
図3に示すように、i番目の位置のn番目の要素は、後方に一つの位置(移動せず、I = N + 1)空のi番目の位置を順次移動させます
図4に示すように、iは位置電子最初の新しい要素に挿入されます
図5に示すように、プラステーブルの長さ
擬似コード:
ステータスListInsert(SqList L&が、int型I、elemType電子) { // シーケンステーブルに挿入された新たな要素Eのi番目の位置、値の有効範囲は= Iである。1 <iが<= + +1 L.length IF((I < 1。)||(I> + L.length 1。 )) 戻り ERROR; // I無効値 IF(== L.length MAXSIZE) 戻り ERROR; // 記憶空間が満杯である ため(J = L.length- 。1 ; J> = I + 1、J、 ) { L.elem [Jの + 1 = L.elem [J]]; // 要素の挿入位置後及び後退 L.elem [I-を1 = E] ; // 第1の位置Iに挿入された要素e L.lenfth ++; // テーブルプラス長い 戻るOKを; } }
第五に、削除操作:
アルゴリズムのステップ:
図1は、iが、そうでない場合は法的リターンエラー方法(1 <= iが= N <正当な値)を削除されたか否かを判断します
2、I + 1番目のn番目の要素が順次前方に移動させるための一つの位置(i =は場合nは移動しません)
図3に示すように、マイナステーブルの長さ
擬似コード;
ListDeleteステータス(SqList L&は、int型のI) { //は、配列表のi番目の要素を削除して、値の有効範囲は、Iである。1 <= iが<= L.length IF((iは< 1)||(I > L.length) 戻りERROR; のための(I = J; J <L.length- 1。、J ++ ) { L.elem [J - 1 ] = L.elem [J]; // 前進 - L.長さ、 戻りOKを; } }
VIの概要;
あなたがあなた自身の理解を深めることができますので、注文テーブルまたは一本鎖かどうか、学習するための最良の方法は、基本的な概念を理解して、彼らと戦うためにすぐに使用することができています。まあ、今朝の午前0時49分で、給油を継続するために、睡眠、明日を浴びせ。