c언어

17. 기본 자료구조

jhhhpark 2023. 6. 28. 11:23

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;
}

[실행결과]