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