c 언어: 순서 표 의 실현 (2) 현지 역 치, 질서 있 는 합병, 크기 조정.


#include<iostream>  
#include<stdio.h>  
#define LIST_INIT_SIZE 100  
using namespace std;
struct Node
{
	int *elem;
	int Length;
	int Listsize;
};
//      
void Error(char *s);       //      		
void printNode(Node &l);   //    
void InitNode(Node &L);    //      
void CreatNode(Node &l);   //       
void InvertNode(Node &l);  //         
void MeryNode(Node &L1, Node &L2,Node &L3);//       
void AdjustNode(Node &l);     //       

//      

void Error(char *s)  //        
{
	cout << s << endl;
	exit(1);
}
void InitNode(Node &L) //       
{
	L.elem = new int[LIST_INIT_SIZE];
	if (!L.elem)
		Error("Overflow!");
	L.Length = 0;
	L.Listsize = LIST_INIT_SIZE;
}
void CreatNode(Node &l) //       
{
	int n;
	cout << "       :";
	cin >> n;
	cout << "       :" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> l.elem[i];
		l.Length++;
	}
	cout << "       !" << endl;
}

void InvertNode(Node &l)  //        
{
	int     n = l.Length;
	for (int i = 0; i < n / 2; i++)
	{
		int  t = l.elem[n - i - 1];
		l.elem[n - i - 1] = l.elem[i];
		l.elem[i] = t;
	}
}
void MeryNode(Node &L1, Node &L2,Node &L3)//    
{
	L3.Length = L1.Length + L2.Length;
	L3.elem = new int[L3.Length];
	if (!L3.elem)
		Error("Overflow!");
	int i = 0;
	int j = 0;
	int k = 0;
	while ((i < L1.Length) && (j < L2.Length)) //  L1 L2
	{
		if (L1.elem[i] <= L2.elem[j])
		{
			L3.elem[k] = L1.elem[i];
			i++;
			k++;
		}
		else
		{
			L3.elem[k] = L2.elem[j];
			j++;
			k++;
		}
	}
	while (i < L1.Length)      // L1       L3 
	{
		L3.elem[k] = L1.elem[i];
		k++;
		i++;
	}
	while (j < L2.Length)       // L2       L3 
	{
		L3.elem[k] = L2.elem[j];
		k++;
		j++;
	}
}
void AdjustNode(Node &l)//    
{
	int n = l.Length;
	int *temp = new int[n];
	int x = 0;
	int y = n - 1;
	for (int i = 0; i < n; i++)
	{
		if (l.elem[i] < 0)
		{
			temp[x] = l.elem[i];
			x++;
		}
		else
		{
			temp[y] = l.elem[i];
			y--;
		}
	}
	for (int j = 0; j < n; j++)
	{
		l.elem[j] = temp[j];
	}
	delete[] temp;
}

void printNode(Node &l) //      
{
	for (int i = 0; i < l.Length; i++)
	{
		cout << l.elem[i] << " ";
	}
	cout << endl;
}
int main()             //     
{
	Node t1,t2,t3;
	//          
	InitNode(t1);
	InitNode(t2);
	InitNode(t3);
	// t1     
	CreatNode(t1);
	cout << "   t1    :" << endl;
	printNode(t1);
	cout << "   t1    :" << endl;
	InvertNode(t1);
	printNode(t1);
	cout << "       :" << endl;
	AdjustNode(t1);
	printNode(t1);
	// t1     
	CreatNode(t2);
	cout << "   t2    :" << endl;
	printNode(t2);
	cout << "   t2    :" << endl;
	InvertNode(t2);
	printNode(t2);
	cout << "       :" << endl;
	AdjustNode(t2);
	printNode(t2);
	
	cout << "       :" << endl;
	MeryNode(t1, t2,t3);
	printNode(t3);
	return 0;
}

좋은 웹페이지 즐겨찾기