오늘은 연결 리스트 이중포인터에 대한 수업을 들었다.
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;
}
'C++' 카테고리의 다른 글
[강의] 12월 11일 수업정리 (0) | 2024.12.11 |
---|---|
[강의] 12월 10일 수업정리 (0) | 2024.12.10 |
[강의] 12월 5일 수업정리 (1) | 2024.12.06 |
[강의] 12월 4일 수업정리 (0) | 2024.12.05 |
[강의] 12월 3일 수업정리 (0) | 2024.12.04 |