小白学アルゴリズム1.2——チェーンテーブル
4021 ワード
小白学アルゴリズム1.2——チェーンテーブル
ラベル:白白学アルゴリズム
1.チェーンテーブルとは
チェーンテーブルは、再帰的なデータ構造であり、空であるか、次のノードを指している.は抽象的な感じに見えますが、私自身の理解では、チェーンテーブルのコンピュータ内の構造を車でシミュレートすることができます.「チェーンテーブルノード」は、チェーンの上にある「円柱ノード」であり、各「円柱ノード」は、最大2つの他の「円柱ノード」に接続され、チェーンが環状でない場合、ヘッドとテールの「円柱ノード」は、1つの他の「円柱ノード」にのみ接続される である.ノードは、一般に、データだけでなく、他のノードへのポインタまたは 参照も含む.チェーンテーブルは方向があり、一般的には一方向チェーンテーブルと双方向チェーンテーブルに分けられる.一方的なチェーンテーブルの結点は地下党のように、前の人は次の人を探すしかなく、次の人は前の人を探すことができません.双方向チェーンテーブルのノードは階段のように上り下り可能ですが、 を越えることはできません.一方向チェーンテーブルには、一般に1つの変数がチェーンヘッダを指し、双方向チェーンテーブルには一般的に2つの変数がチェーンヘッダとテール を指す.チェーンテーブルの一般的な操作は、新規、追加、削除、および変更 です.チェーンテーブルは空間の利用率が高く,配列の重要な代替方式である である.
2.一方向チェーンテーブルで一つのスタックを実現する
チェーンテーブルは動的にメモリを申請するので、チェーンテーブルのサイズを設定する必要はありません.チェーンテーブルの操作を行うためにheadを設定するだけでいいです. を使用する. のようなデータ型である. に強制的に変換する必要がある.スタックに入るとき、チェーンテーブルが空の場合、メモリ領域を申請し、最初のノードとします.チェーンテーブルが空でない場合は、メモリ領域を申請し、元のチェーンテーブルヘッダの前に を配置します. JavaまたはC++では を申請することができる.
2.2出庫 C/C++言語で自分が申請したメモリは自分で解放され、mallocとfreeは一つ一つ対応し、newとdeleteは一つ一つ に対応する. Javaメモリを解放する必要はありません 2.3スタックが空かどうか
2.4主関数
この主関数は4~0を順次スタックに入れ,その後順次スタックを出る.
運転結果は以下の通り:逆順序出力,OK~
3.まとめノード要素に も必要である.チェーンテーブルの削除、挿入と修正はチェーンテーブル全体を遍歴し、削除または修正されたノードまたは挿入の位置を見つけて操作すればよい.肝心なのは削除と挿入が前後のノードの関係を処理しなければならないことであり、矩形図を描いて を理解することができる.主流言語にはチェーンテーブルテンプレートクラスがあり、 を直接使用することができます.
ラベル:白白学アルゴリズム
1.チェーンテーブルとは
チェーンテーブルは、再帰的なデータ構造であり、空であるか、次のノードを指している.
struct node{
int data;
node* next;
};
2.一方向チェーンテーブルで一つのスタックを実現する
チェーンテーブルは動的にメモリを申請するので、チェーンテーブルのサイズを設定する必要はありません.チェーンテーブルの操作を行うためにheadを設定するだけでいいです.
node* head = null;
2.1インスタックvoid push(int mydata)
{
node* p = (node*)malloc(sizeof(node));//
p->data = mydata;
p->next = NULL;
if (head == NULL)
head = p;
else
{
p->next = head;
head = p;
}
}
malloc
はヘッダファイルstdlibを含む必要がある.h malloc
の役割はメモリの中で1段のメモリ空間を申請することであり、戻り値はvoid*
タイプであり、パラメータは申請空間の大きさを表し、一般的にsizeof()
関数と協力してsizeof()
パラメータは、一般に、構造体node
int
malloc
関数の戻り値を使用するには、特定のタイプnew
を使用して空間2.2出庫
int pop()
{
int mydata = head->data;
node* p = head;
head = head->next;
free(p);//
return mydata;
}
bool isEmpty()
{
return head == NULL;
}
2.4主関数
この主関数は4~0を順次スタックに入れ,その後順次スタックを出る.
int main(int argc, char* argv[])
{
printf(" :http://blog.csdn.net/xuelabizp
");
int n = 5;
while (n--)
{
printf("%d\t",n);
push(n);
}
printf("
");
while (!isEmpty())
{
printf("%d\t",pop());
}
printf("
");
return 0;
}
運転結果は以下の通り:逆順序出力,OK~
3.まとめ
node*
タイプのメンバーを追加することができ、pushの新しい数値のたびに、新しいノードがヘッドノードを指すことができ、ヘッドノードが新しいノードを指すことができる.これは双方向チェーンテーブルであり、もちろんチェーンテーブルの尾を常に指すtail