https://youtu.be/MzsOdFqtK7M

maim.cpp

#include <iostream>
#include <time.h>

#include "Arr.h"
#include "LinkedList.h"

void BubblsSort(int* _pData, int _iCount )
{
	//데이타가 1개 이하인
	if (_iCount <= 1)
		return;

	//오름차순 정렬

	while (true)
	{
		bool bFinish = true;
		int iLoop = _iCount - 1;
		for (int i = 0; i < iLoop; ++i)
		{
			if (_pData[i] > _pData[i + 1])
			{
				int iTemp = _pData[i];
				_pData[i] = _pData[i + 1];
				_pData[i + 1] = iTemp;
				bFinish = false;
			}
		}

		if (bFinish)
			break;
	}
}

//void Test()
//{
//
//}


int main()
{
	//함수 포인트
	//void(*pFunc)(void);
	//pFunc = Test;
	//pFunc();

	int iArrp[10] = {123,145,13,46,231,885};
	BubblsSort(iArrp, 10);
	for (int i = 0; i < 10; ++i)
	{
		printf("%d\n", iArrp[i]);
	}

	printf("정렬\n");


	tArr s1 = {};

	InitArr(&s1);
	
	//난수(렌덤)
	srand(time(nullptr));
	printf("난수\n");
	for (int i = 0; i < 10; ++i)
	{
		int iRand = rand() % 100 + 1;

		PushBack(&s1, iRand);
	}

	for (int i = 0; i < s1.iCount; ++i)
	{
		printf("%d\n",s1.pInt[i]);
	}

	printf("정렬\n");
	Sort(&s1, &BubblsSort);

	for (int i = 0; i < s1.iCount; ++i)
	{
		printf("%d\n", s1.pInt[i]);
	}

	ReleaseArr(&s1);

	// 연결형 리스트

	return 0;
}

Arr.h

#pragma once

//ints
typedef struct _tagArr
{
	int*		pInt; // 포인터
	int			iCount; // 카운터
	int			iMaxCount; // 최대 카운터
}tArr;

// 배열 초기화 함수
void InitArr(tArr* _pArr);

//데이터 추가 함수
void PushBack(tArr* _pArr, int _iData);

//공간 추가 확장
void Reallocate(tArr* _pArr);

//배열 메모리 해제 함수
void ReleaseArr(tArr* _pArr);

//데이터 정렬 함수
void Sort(tArr* _pArr,void(*SortFunc)(int*, int));

Arr.cpp

#include "Arr.h"
#include <iostream>

//초기화
void InitArr(tArr* _pArr)
{
	_pArr->pInt = (int*)malloc(sizeof(int) * 2);
	//(*_pArr).iCount = 0;
	_pArr->iCount = 0;
	_pArr->iMaxCount = 2;
}

void Reallocate(tArr* _pArr)
{
	//1. 2배 더 큰 공간을 동적할당한다.
	int* pNew = (int*)malloc(_pArr->iMaxCount * 2 * sizeof(int));

	//2. 기존 공간에 있던 데이터들을 새로 할당한 공간으로 복사시킨다.
	for (int i = 0; i < _pArr->iCount; ++i)
	{
		pNew[i] = _pArr->pInt[i];
	}
	//3. 기존 공간은 메모리 해제
	free(_pArr->pInt);

	//4. 배열이 새로 할당된 공간을 가리키게 하다.
	_pArr->pInt = pNew;

	//5. MaxCount 변경점 적용
	_pArr->iMaxCount *= 2;
	
}

void PushBack(tArr* _pArr, int _iData)
{
	// 힙 영역에 할당한 공간이 다 참 확인
	if (_pArr->iMaxCount <= _pArr->iCount)
	{
		//재할당
		Reallocate(_pArr);
	}

	// 데이터 추가
	_pArr->pInt[_pArr->iCount++] = _iData;
	
}

// 힙 영역 할당 제거
void ReleaseArr(tArr* _pArr)
{
	free(_pArr->pInt);
	_pArr->iCount = 0;
	_pArr->iMaxCount = 0;
}

void Sort(tArr* _pArr, void(*SortFunc)(int*, int))
{
	_pArr;
	SortFunc(_pArr->pInt, _pArr->iCount);

}

[요약]

void Test()
{

}

int main()
{
	//함수 포인트
	void(*pFunc)(void) = nullptr;
	pFunc = Test;
	pFunc();
    
    return 0;
 }

'C,C++' 카테고리의 다른 글

C,C++ 템플릿  (0) 2023.07.17
C,C++ 기초 CLASS / STRUCT  (0) 2023.07.16
C,C++기초 리스트  (0) 2023.07.15
C 기초 가변 배열  (0) 2023.07.14
C언어의 기초 문법  (0) 2023.07.12

+ Recent posts