//작성자: 김준현
//작성일: 2015 08
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int DATA;
typedef struct linkedList
{
 DATA element;
 struct linkedList* connect;
}linkedList;
typedef struct
{
 linkedList* head;
 linkedList* tail;
 DATA nNodeCnt;
}link;
void initiallize_linkedList(link*);//초기화
void linkedList_Data_Input(link*, const int);//데이터 삽입
void linkedList_Data_Printf(link*);
void merge(link*, link*,link*);//link1, link2, link1+2
int main(void)
{
 link linkedlist_1;
 link linkedlist_2;
 link linkedlist_1_sum_linkedlist_2;
 //linkedlist_1 과 linkedlist_2 초기화
 initiallize_linkedList(&linkedlist_1);
 initiallize_linkedList(&linkedlist_2);
 initiallize_linkedList(&linkedlist_1_sum_linkedlist_2);
 //linkedlist_1 과 linkedlist_2 데이터 삽입
 //LINKEDLIST_1
 linkedList_Data_Input(&linkedlist_1, 10);
 linkedList_Data_Input(&linkedlist_1, 0);
 linkedList_Data_Input(&linkedlist_1, 8);
 linkedList_Data_Input(&linkedlist_1, 2);
 linkedList_Data_Input(&linkedlist_1, 1);
 linkedList_Data_Input(&linkedlist_1, 111);
 linkedList_Data_Input(&linkedlist_1, 12);
 linkedList_Data_Input(&linkedlist_1, 3);
 linkedList_Data_Input(&linkedlist_1, 5);
 linkedList_Data_Input(&linkedlist_1, 77);
 printf("linkedlist_1:   ");
 linkedList_Data_Printf(&linkedlist_1);
 //LINKEDLIST_2
 
 linkedList_Data_Input(&linkedlist_2, 22);
 linkedList_Data_Input(&linkedlist_2, 13);
 linkedList_Data_Input(&linkedlist_2, 1114);
 linkedList_Data_Input(&linkedlist_2, 212);
 linkedList_Data_Input(&linkedlist_2, 30);
 printf("linkedlist_2:   ");
 linkedList_Data_Printf(&linkedlist_2);
 merge(&linkedlist_1, &linkedlist_2, &linkedlist_1_sum_linkedlist_2);
 
 printf("linkedlist_1 + linkedlist_2:   ");
 linkedList_Data_Printf(&linkedlist_1_sum_linkedlist_2);
 return 0;
}
void initiallize_linkedList(link* L)
{
 L->head = (linkedList*)malloc(sizeof(linkedList));
 memset(L->head, 0, sizeof(linkedList));
 L->tail = L->head;
 L->nNodeCnt = 0;//데이터 갯수 초기화
}
void linkedList_Data_Input(link* L, const int DATA)
{
 linkedList* new_node = (linkedList*)malloc(sizeof(linkedList));
 if (new_node == NULL)
 {
  printf("동적할당 실패!!\n");
  return;//종료
 }
 else//(new_node != NULL)
 {
  memset(new_node, 0, sizeof(linkedList));
  if (L->head->connect == NULL)
  {
   L->nNodeCnt++; // 데이터 갯수 +1
   new_node->element = DATA;
   L->tail->connect = new_node;// L->tail-------new_node
   L->tail = new_node;
   L->tail->connect = NULL;
  }
  else
  {
   linkedList* temp_index = L->head;
   int temp_count = 0;
   while (temp_count != L->nNodeCnt)
   {
    temp_index = temp_index->connect;
    temp_count++;
   }
   temp_index->connect = new_node;
   L->nNodeCnt++;// 데이터 갯수 +1
   new_node->element = DATA;
   L->tail = new_node;
   L->tail->connect = NULL;
  }

 }
}
void linkedList_Data_Printf(link* L)
{
 linkedList* index_ = L->head->connect;
 while (index_ != NULL)
 {
  printf("%d ", index_->element);
  index_ = index_->connect;
 }
 printf("\n");
}
void merge(link* L1, link* L2, link* L12)
{
 int total_size = 0;
 total_size = L1->nNodeCnt + L2->nNodeCnt;
 DATA* array_temp = (DATA*)malloc(sizeof(DATA)* (L1->nNodeCnt + L2->nNodeCnt));
 memset(array_temp, 0, sizeof(DATA)* total_size);
 int j = 0;//index
 int i = 0;
 int temp_exchange = 0;
 int result = 0;
 L1->tail->connect = L2->head->connect;
 L12->head = L1->head;
 L12->tail = L2->tail;
 L12->nNodeCnt = total_size;
 linkedList* index_temp = L12->head->connect;
 while (index_temp != NULL)
 {
  array_temp[i] = index_temp->element;
  i++;
  index_temp = index_temp->connect;
 }
 /*
 printf("test----print---------------\n");
 for (i = 0; i < L12->nNodeCnt; i++)
 {
  printf("%d ", array_temp[i]);
 }
 */
 printf("\n");

 //bubble sort
 for (i = 0; i < L12->nNodeCnt - 1; i++)
 {
  result = 0;
  for (j = 0; j < L12->nNodeCnt - 1; j++)
  {
   if (array_temp[j]>array_temp[j + 1])
   {
    temp_exchange = array_temp[j];
    array_temp[j] = array_temp[j + 1];
    array_temp[j + 1] = temp_exchange;
    result = 1;
   }
  }
  if (result == 0)
  {
   break;
  }
 }
 index_temp = L12->head->connect;
 i = 0;
 while (index_temp != NULL)
 {
  index_temp->element = array_temp[i];
     i++;
     index_temp = index_temp->connect;
 }
}

'언어' 카테고리의 다른 글

naver 지식인 - 1 (2015/ 08/ 30)  (0) 2015.08.30
2015_08_27  (0) 2015.08.27
swap  (0) 2015.08.27
linkedlist _ 오름차순 정렬  (0) 2015.08.25
LOTTO_VER2  (0) 2015.08.24