blog

データ構造とアルゴリズム - 線形テーブル

線形テーブル:ゼロ以上のデータ要素の有限シーケンス。 線形テーブルの要素の数nは、線形テーブルの長さとして定義され、n = 0のとき、それは空のテーブルと呼ばれています。 1対1の論理関係を格納。 構...

Apr 8, 2020 · 3 min. read
シェア

プロジェクト GitHub:

線形テーブルの定義

  1. Linear table(リニア・テーブル): 0個以上のデータ要素からなる有限のシーケンス
  2. リニアテーブルの要素数nは、リニアテーブルの長さとして定義され、n = 0のとき、それは空のテーブルと呼ばれます。
  3. 論理的な関係を1対1で保存します。

リニアテーブルの特徴

  1. first "というユニークなデータ要素があります;
  2. last "というユニークなデータ要素があります;
  3. 最初のものを除いて、構造体内の各データ要素は1つの前任者しか持ちません;
  4. 構造体の各データ要素には、最後のものを除いて後継者が1つしかありません。

リニア・テーブルの抽象データ型定義

ADT Linear Table Data : データ・オブジェクトの集まり。要素と要素は同じ型を持ち、隣接する要素には前任者と後任者の関係があります。操作:

  1. InitList(*L): 空の線形テーブル L を構築します。
  2. DestroyList(*L):線形テーブルがあればそれを破棄します。
  3. ClearList(*L):線形テーブルをクリアします。
  4. ListEmpty(L):線形テーブルが空の場合はtrueを返し、そうでない場合はfalseを返します。
  5. GetElem(L, i, &e): eを持つ線形テーブルのi番目の要素を返します。
  6. LocateElem(L, e):Lの中でeに等しい最初の要素の序数を返します。存在しない場合は0を返します。
  7. ListDelet(int i): i 番目の要素を削除し、その値を返します。
  8. PriorElem(const T& item): item の前任者と等しい最初の要素を返します。
  9. NextElem(const T& item): item に等しい最初の要素の後継を返します。

エンドアドット

C++言語の説明と実装

線形テーブルの逐次記憶構造の定義

  • 線形テーブルの抽象化とカプセル化
/*
 *	Sequential List - 線形テーブルの逐次記憶構造
 *	特徴:論理的な隣人と物理的な隣人。
*/
template<class T>
class s_List
{
public:
	s_List(int listCapacity = 10);			//コンストラクタは、デフォルトの容量10でリニアテーブルを初期化する。
	void ClearList();						//空のリニアテーブル
	bool ListEmpty() const;					//線形テーブルが空であるかどうかを判断する
	bool ListInsert(int i, const T& item);	//iの位置に要素の項目を挿入する
	int ListLength();						//線形テーブルの要素数を取得する
	int LocateElem(const T& item);			//itemに等しい最初の要素の番号、またはそれが存在しない場合は0を返す。
	T GetElem(int i);						//i番目の要素の値を取得する
	T ListDelet(int i);						//i番目の要素を削除し、その値を返す
	T PriorElem(const T& item);				//アイテムに等しい最初の要素の前任者を返す
	T NextElem(const T& item);				//itemに等しい最初の要素の後継を返す
	~s_List();								//リニアテーブルを破棄する
private:
	T* s_list;								//リニアテーブルポインタ
	int capacity;							//リニアテーブルの長さ
	int length;								//線形テーブルの要素数
};

リニアテーブルの連鎖ストレージ構造の定義

  • 線形テーブルの抽象化とカプセル化
/*
 *	Link List - 線形テーブルの連鎖ストレージ構造
 *	特徴:論理的隣接、物理的非隣接。
*/
template<class T>
class Node 
{
public:
	T data;
	Node* next;
};
template<class T>
class l_list
{
public:
	l_list();								//コンストラクタは、ヘッダーノードを初期化する
	bool ListInsert(const T& item);			//ロジックの最後に新しい要素項目を挿入する。
	bool ListInsert(int i, const T& item);	//論理的な順序で新しい要素の項目を挿入する。
	int LocateElem(const T& item);			//アイテム要素と等しい最初の番号を返し、それが存在しない場合は0を返す。
	T GetElem(int i);						//i要素の値を取得する,i=0次に、ヘッドノードのデータフィールド、すなわち、要素の数を返す。
	T ListDelet(int i);						//i番目の要素を削除し、その値を返す
	~l_list();								//リニアテーブルを破棄する
private:
	Node<T>* head;					// 
	Node<T>* rNode;					// 
};

メソッドの実装

  • このショーの不便の長さのために達成するための具体的な方法は、読者がプロジェクトのGitHubをジャンプしてください:、詳細にすべてのコードをお読みください。
  • すべてのアクティブな問題の投稿を歓迎し、感謝スター。
Read next

Android9.0とandroid.content.res.Resources$NotFoundExceptionの問題解決

主にシステム・フォンで、$という行のクラッシュがあります。エラーを報告した画像はpng形式で、xxdhpiディレクトリに保存されており、Apkに存在していました。参照...

Apr 8, 2020 · 6 min read

Javaワークフローの詳細

Apr 8, 2020 · 6 min read

焦点損失関数 焦点損失とGHM

Apr 7, 2020 · 14 min read

cluster$adaptive

Apr 7, 2020 · 1 min read

遅延タスク - DelayQueue

Apr 7, 2020 · 4 min read