C++

[강의] 12월 6일 수업정리

k-codestudy 2024. 12. 6. 17:50

오늘은 연결 리스트 이중포인터에 대한 수업을 들었다.

 

1. 이중 포인터를 이용하여 PushBack 구현

// game.h
#pragma once
#include <stdio.h>

class C_GAME
{
private:
	struct S_NODE
	{
		int nData;
		S_NODE* pNext;
	};
private:
	S_NODE* createNode(int nData);
private:
	S_NODE* m_pBegin;
	S_NODE** m_ppEnd;
public:
	C_GAME();
	void pushBack(int nData);
	void print();
};

// game.cpp
#include "game.h"

C_GAME::S_NODE* C_GAME::createNode(int nData)
{
	S_NODE* pNode = new S_NODE{};
	pNode->nData = nData;
	pNode->pNext = nullptr;

	return pNode;
}

C_GAME::C_GAME():
	m_pBegin{},
	m_ppEnd{}
{
	m_ppEnd = &m_pBegin;
}

void C_GAME::pushBack(int nData)
{
	*m_ppEnd = createNode(nData);
	m_ppEnd = &(*m_ppEnd)->pNext;
}

void C_GAME::print()
{
	S_NODE* pNode = m_pBegin;

	while (pNode)
	{
		printf("%d ", pNode->nData);
		pNode = pNode->pNext;
	}
	printf("\n");
}

// main.cpp
#include <iostream>
#include "game.h"

int main()
{
	C_GAME cGame{};

	cGame.pushBack(1);
	cGame.pushBack(2);
	cGame.pushBack(3);
	cGame.pushBack(4);
	cGame.pushBack(5);

	cGame.print();
}

 

2. 이중포인터를 이용하여 데이터 삭제 구현 

void C_GAME::remove(int nData)
{
	S_NODE** ppNode = &m_pBegin;

	while (*ppNode)
	{
		if ((*ppNode)->nData == nData)
		{
			S_NODE* pDel = *ppNode;
			*ppNode = (*ppNode)->pNext;
			delete pDel;
		}
		else
			ppNode = &(*ppNode)->pNext;
	}
}

 

3. 이중 포인터를 이용하여 맨 처음, 맨 마지막 데이터 삭제, 데이터가 한개 일때 삭제 ( pushBack으로 확인해볼것 )

void C_GAME::remove(int nData)
{
	S_NODE** ppNode = &m_pBegin;

	while (*ppNode)
	{
		if ((*ppNode)->nData == nData)
		{
			S_NODE* pDel = *ppNode;
			*ppNode = (*ppNode)->pNext;
			delete pDel;
		}
		else
			ppNode = &(*ppNode)->pNext;
	}
	m_ppEnd = ppNode;
}