본문 바로가기

c언어

17. 기본 자료구조

1. 사용자로부터 다섯 개의 문자열을 입력받은 후, 내림차순으로 버블 정렬하여 출력하는 코드를 작성하세요. 단, 다섯 개의 문자열은 모두 동적으로 할당받은 메모리에 저장해야 합니다. 배열은 절대로 사용하지 않습니다.

[소스코드]

 

[실행결과]

 

 

2. 다음의 코드는 크기가 5인 스택을 구현하는 미완성 코드입니다. Push( ) 함수는 스택에 자료를 넣는 함수이고, Pop( ) 함수는 꺼내는 함수입니다. 만일 스택이 비어 있으면 Pop( ) 함수는 0을 반환하며 그렇지 않을 경우에는 1을 반환합니다. 그리고 인자로 전달받은 주 소에 스택에서 꺼낸 값을 저장해 줍니다. Push( ) 함수는 인자로 양수만 받을 수 있어야 하며 자료 추가에 성공하면 1을 반환하지 만, 스택이 다 채워졌거나 인자가 음수인 경우에는 0을 반환합니다. 조건이 이와 같을 때, 프로그램의 실행 결과로 5행에 걸쳐 각각 5, 4, 3, 2, 1이 출력되도록 Push( )/Pop( ) 함수의 코드를 작성하세요.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int g_anStack[5] = { 0 };
int g_nStackpointer = -1;

int Push(int nData)
{
	return 1;
}

int Pop(int* pnData)
{
	return 1;
}

void main()
{
	int i = 0, nData = 0;
	for (i = 1; i <= 5; ++i)
		Push(i);
	
	for (i = 1; i <= 5; ++i)
	{
		if (Pop(&nData))
		{
			printf("%d\n", nData);
		}
	}
	return;
}

[소스코드]

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int g_anStack[5] = { 0 };
int g_nStackpointer = -1;

int Push(int nData)
{
	int nResult = -1;
	if (nData >= 0 && g_nStackpointer < (int)(__crt_countof(g_anStack) - 1))
	{
		g_anStack[++g_nStackpointer] = nData;
		nResult = 1;
	}
	return nResult;
}

int Pop(int* pnData)
{
	int nResult = -1;
	if (g_nStackpointer >= 0)
	{
		*pnData = g_anStack[g_nStackpointer--];
		nResult = 1;
	}

	return nResult;
}

void main()
{
	int i = 0, nData = 0;
	for (i = 1; i <= 5; ++i)
		Push(i);
	
	for (i = 1; i <= 5; ++i)
	{
		if (Pop(&nData))
		{
			printf("%d\n", nData);
		}
	}
	return;
}

[실행결과]

 

 

3. 크기가 5인 int형 배열을 선언하되 각 요소의 값이 1~5범위에서 중복되지 않도록 초기화한 후, qsort() 함수를 사용하여 내림차순으로 정렬하고 결과를 출력하는 프로그램을 작성하세요.

[소스코드]

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>

void PrintArray(int* pArray, int nLength)
{
	for (int i = 0; i < nLength; ++i)
	{
		printf("%d ", pArray[i]);
	}
	putc('\n', stdout);
	return;
}

int Compare(void const* pData1, void const* pData2)
{
	int nData1 = *((int*)pData1);
	int nData2 = *((int*)pData2);
	if (nData1 < nData2)
	{
		return 1;
	}
	else if (nData1 == nData2)
	{
		return 0;
	}
	else
	{
		return -1;
	}
}

void main()
{
	int anArray[5] = { 5, 3, 2, 1, 4 };
	puts("Before)");
	PrintArray(anArray, __crt_countof(anArray));
	qsort((void*)anArray, __crt_countof(anArray), sizeof(anArray[0]), Compare);
	puts("After)");
	PrintArray(anArray, __crt_countof(anArray));
	return;
}

[실행결과]

 

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

19. 전처리기  (0) 2023.08.01
18. 파일 입출력  (0) 2023.08.01
16. 구조체와 공용체  (0) 2023.06.28
15. 함수에 대한 고급 이론  (0) 2023.06.27
14. 변수에 대한 고급 이론  (0) 2023.06.26