2つの順序付きチェーンテーブルを1つのチェーンテーブルに結合

2335 ワード

コード実装機能は、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つの秩序チェーンテーブルに統合する目的を実現することができる.