2つの順序付きチェーンテーブルを1つのチェーンテーブルに結合
2335 ワード
コード実装機能は、2つの秩序チェーンテーブルを1つの秩序チェーンテーブルに統合することです.
具体的には、まず自分でチェーンテーブルの作成関数を呼び出し、手動で2つの秩序あるチェーンテーブルを作成し、チェーンテーブルの作成は0をカットオフフラグとして入力します.2つの順序付きチェーンテーブルを作成した後、2つのチェーンテーブルのヘッダノードを比較し、小さいものを結合後のチェーンテーブルのヘッダノードとし、同時に、2つのポインタがそれぞれ2つのチェーンテーブルのヘッダノードまたはヘッダノードを指す次のノードを作成し、2つのチェーンテーブルが比較される要素が空でない場合、順次下から大へ接続し、1つのチェーンテーブルの比較ノードが空になり始めると、別のチェーンテーブルの残りのノードが連結チェーンテーブルの末尾に追加されます.
具体的なコードは以下のように実現される.
また、この問題を別の考え方で解決することにより、2つの順序付きチェーンテーブルの統合を実現することができる:まず、2つのチェーンテーブルを直接1つのチェーンテーブル(順序付けされていない、直接チェーンテーブル1の末尾ノードがチェーンテーブル2の最初のノードを指し、もちろんこの2つはいずれも先頭ノードではないチェーンテーブル)に統合し、その後、チェーンテーブルのノードの要素をソートすればよい.最小のノード値は、最初のバーノードに配置されます.2つの秩序チェーンテーブルを1つの秩序チェーンテーブルに統合する目的を実現することができる.
具体的には、まず自分でチェーンテーブルの作成関数を呼び出し、手動で2つの秩序あるチェーンテーブルを作成し、チェーンテーブルの作成は0をカットオフフラグとして入力します.2つの順序付きチェーンテーブルを作成した後、2つのチェーンテーブルのヘッダノードを比較し、小さいものを結合後のチェーンテーブルのヘッダノードとし、同時に、2つのポインタがそれぞれ2つのチェーンテーブルのヘッダノードまたはヘッダノードを指す次のノードを作成し、2つのチェーンテーブルが比較される要素が空でない場合、順次下から大へ接続し、1つのチェーンテーブルの比較ノードが空になり始めると、別のチェーンテーブルの残りのノードが連結チェーンテーブルの末尾に追加されます.
具体的なコードは以下のように実現される.
/*
head1 head2 , 。
( , )
*/
#include
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}Node;
Node* Merge(Node* head1, Node* head2) //
{
if(head1 == NULL)
return head2;
if(head2 == NULL)
return head1;
Node *head, *p1, *p2;
if(head1->data < head2->data) //
{
head = head1;
p1 = head1->next;
p2 = head2;
}
else
{
head = head2;
p1 = head1;
p2 = head2->next;
}
Node *move = head; // ,
while(p1 && p2)
{
if(p1->data <= p2->data)
{
move->next = p1;
move = p1;
p1 = p1->next;
}
else if(p1->data > p2->data)
{
move->next = p2;
move = p2;
p2 = p2->next;
}
}
if(p1)
move->next = p1; // p1
if(p2)
move->next = p2; // p2
return head;
}
Node* Creat() //
{
Node *head,*p,*s;
head = new Node;
if(head == NULL)
printf(" !
");
p = head;
int x;
char cycle = 1;
while(cycle)
{
printf("please input a number:
");
cin >> x;
if(x != 0)
{
s = new Node;
s->data = x;
p->next = s;
p = s;
}
else
cycle = 0;
}
head = head->next;
p->next = NULL;
printf(" !
");
return head;
}
void Print(Node *head)
{
Node *p = head;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("
");
}
int main()
{
Node *head1 = Creat();
Node *head2 = Creat();
Node *head3 = Merge(head1, head2);
Print(head3);
return 0;
}
また、この問題を別の考え方で解決することにより、2つの順序付きチェーンテーブルの統合を実現することができる:まず、2つのチェーンテーブルを直接1つのチェーンテーブル(順序付けされていない、直接チェーンテーブル1の末尾ノードがチェーンテーブル2の最初のノードを指し、もちろんこの2つはいずれも先頭ノードではないチェーンテーブル)に統合し、その後、チェーンテーブルのノードの要素をソートすればよい.最小のノード値は、最初のバーノードに配置されます.2つの秩序チェーンテーブルを1つの秩序チェーンテーブルに統合する目的を実現することができる.