チェーンテーブルの実現原理
5279 ワード
まず、チェーンテーブルを格納するためのデータ構造のノードを構築し、構造体によって実現することができます.
一、ノードの第一歩を作成し、一時変数を定義し、第二歩を初期化し、そのヘッダノードが空ノードであるかどうかを判断し、空ノードである場合、一時ヘッダポインタを一時変数の第三歩に向け、ヘッダノードが空ノードでない場合、ヘッダノードを一時変数の次のノードに向け、ヘッダノードをそのノードに向ける
二、1つのノードの第1ステップを削除し、2つのポインタ変数をそれぞれtemp 1と定義し、temp 2はヘッダノードの第2ステップを指し、temp 1がユーザーが検索する価値のあるノードに等しくない場合、temp 2はtemp 1を指す.temp 1は次のノードを指し、ポインタがユーザが調べる場所を指すまで第3のステップを指す.このときtemp 1は現在削除する必要があるノードを指し、temp 2は前のノードを指すので、temp 2のポインタをtemp 1の次のノードを指し、temp 1のノードを解放する
三、1つのノードを修正関数を検索することによって、現在修正する必要があるノードの位置を見つけ、現在のノードに対して値付け操作を行い、それによって修正操作を実現する
四、ノードを検索する第一歩、一時的なポインタがヘッドノードを指す第二歩を宣言し、ループで検索し、現在のノードがユーザーが検索する必要がある値に等しくない場合、ポインタは次のステップに進み、最後のノードが見つからない場合、印刷情報を出力し、現在のチェーンテーブル内にユーザーが検索したデータがないことを示す
五、現在のチェーンテーブルの第一歩を表示し、一時ポインタを宣言し、一時変数の第二歩に頭結点を割り当て、一時ポインタの次のノードが空であるかどうかを判断し、空でない場合、各ノードの値の第三歩を循環印刷し、空である場合、直接現在ポインタの値を出力する
typedef struct node
{
unsigned long int data;
struct node* next;
}node_t;
一、ノードの第一歩を作成し、一時変数を定義し、第二歩を初期化し、そのヘッダノードが空ノードであるかどうかを判断し、空ノードである場合、一時ヘッダポインタを一時変数の第三歩に向け、ヘッダノードが空ノードでない場合、ヘッダノードを一時変数の次のノードに向け、ヘッダノードをそのノードに向ける
node_t* link_create(node_t* head,unsigned long int data)
{
node_t* temp = MALLOC;
temp->data = data;
if(head == NULL)
{
temp->next = NULL;
head = temp;
}
else
{
temp->next = head;
head = temp;
}
return head;
}
二、1つのノードの第1ステップを削除し、2つのポインタ変数をそれぞれtemp 1と定義し、temp 2はヘッダノードの第2ステップを指し、temp 1がユーザーが検索する価値のあるノードに等しくない場合、temp 2はtemp 1を指す.temp 1は次のノードを指し、ポインタがユーザが調べる場所を指すまで第3のステップを指す.このときtemp 1は現在削除する必要があるノードを指し、temp 2は前のノードを指すので、temp 2のポインタをtemp 1の次のノードを指し、temp 1のノードを解放する
node_t* link_create(node_t* head,unsigned long int data)
{
node_t* temp = MALLOC;
temp->data = data;
if(head == NULL)
{
temp->next = NULL;
head = temp;
}
else
{
temp->next = head;
head = temp;
}
return head;
}
三、1つのノードを修正関数を検索することによって、現在修正する必要があるノードの位置を見つけ、現在のノードに対して値付け操作を行い、それによって修正操作を実現する
node_t* link_modify(node_t* head,unsigned long int data1,unsigned long int data2)
{
node_t* temp;
temp = link_query(head,data1);
temp->data = data2;
return head;
}
四、ノードを検索する第一歩、一時的なポインタがヘッドノードを指す第二歩を宣言し、ループで検索し、現在のノードがユーザーが検索する必要がある値に等しくない場合、ポインタは次のステップに進み、最後のノードが見つからない場合、印刷情報を出力し、現在のチェーンテーブル内にユーザーが検索したデータがないことを示す
node_t* link_query(node_t* head,unsigned long int data)
{
node_t* temp = head;
while(temp->data != data)
{
temp = temp->next;
if(temp->next == NULL)
{
printf("not find your data!");
}
}
return temp;
}
五、現在のチェーンテーブルの第一歩を表示し、一時ポインタを宣言し、一時変数の第二歩に頭結点を割り当て、一時ポインタの次のノードが空であるかどうかを判断し、空でない場合、各ノードの値の第三歩を循環印刷し、空である場合、直接現在ポインタの値を出力する
void link_display(node_t* head)
{
node_t* temp = head;
while (temp->next != NULL)
{
printf("%ld
",temp->data);
temp = temp->next;
}
printf("%ld
",temp->data);
}