티스토리 뷰

앞서 제시한 연습문제 04. 3에서는 다음 Point 구조체를 기반으로 한 예제의 작성을 요구했습니다.

typedef struct Point
{
	int xpos;
	int ypos;
} Point;

그런데 당시에는 연결 리스트에 정렬의 기준을 등록하지 않았습니다. 하지만 이번에는 다음의 정렬 기준을 연결 리스트에 등록하여 그 결과를 확인하고자 합니다.

  • x좌표의 값을 기준으로 오름차순 정렬이 되게 합니다.
  • x좌표의 값이 같은 경우에는 y좌표를 대상으로 오름차순 정렬이 되게 합니다.

연습문제 04. 3의 답안에서 변경되어야 하는 파일은 main 함수가 담겨있는 소스 파일 하나여야 합니다.


제가 작성한 코드는 아래의 '더보기'를 클릭하여 확인할 수 있습니다.

혹시 이해가 되지 않거나 추가 설명이 필요하다면 언제든지 물어봐주시기 바랍니다.

더보기
//main.c 소스 파일로 저장
#include <stdio.h>
#include <stdlib.h>
#include "DLinkedList.h"

int WhoIsPrecede(Point* ppos1, Point* ppos2)
{
	if (ppos1->xpos < ppos2->xpos) return 0;
	if (ppos1->xpos == ppos2->xpos && ppos1->ypos < ppos2->ypos) return 0;
	return 1;
}

int main(void)
{
	List list;
	Point compPos = { 2, 0 };
	Point* ppos;
	ListInit(&list);
	SetSortRule(&list, WhoIsPrecede);

	//4개의 데이터 저장
	ppos = (Point*)malloc(sizeof(Point));
	SetPointPos(ppos, 3, 2);
	LInsert(&list, ppos);

	ppos = (Point*)malloc(sizeof(Point));
	SetPointPos(ppos, 2, 2);
	LInsert(&list, ppos);

	ppos = (Point*)malloc(sizeof(Point));
	SetPointPos(ppos, 2, 1);
	LInsert(&list, ppos);

	ppos = (Point*)malloc(sizeof(Point));
	SetPointPos(ppos, 3, 1);
	LInsert(&list, ppos);

	//저장된 데이터의 전체 출력
	printf("현재 데이터의 수 : %d\n", LCount(&list));

	if (LFirst(&list, &ppos))
	{
		ShowPointPos(ppos);
		while (LNext(&list, &ppos))
		{
			ShowPointPos(ppos);
		}
	}
	printf("\n\n");

	//xpos가 2인 모든 데이터 삭제
	if (LFirst(&list, &ppos))
	{
		if (PointComp(ppos, &compPos) == 1 || PointComp(ppos, &compPos) == 0)
		{
			ppos = LRemove(&list);
			free(ppos);
		}

		while (LNext(&list, &ppos))
		{
			if (PointComp(ppos, &compPos) == 1 || PointComp(ppos, &compPos) == 0)
			{
				ppos = LRemove(&list);
				free(ppos);
			}
		}
	}

	//삭제 후 남은 데이터 전체 출력
	printf("현재 데이터의 수 : %d\n", LCount(&list));

	if (LFirst(&list, &ppos))
	{
		ShowPointPos(ppos);
		while (LNext(&list, &ppos))
		{
			ShowPointPos(ppos);
		}
	}
	printf("\n\n");

	return 0;
}

/*
실행결과

현재 데이터의 수 : 4
[2, 1]
[2, 2]
[3, 1]
[3, 2]


현재 데이터의 수 : 2
[3, 1]
[3, 2]

*/
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함