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;
}
[실행결과]