자기개발/C++
C++ - 단순연결리스트 (구조체)
pi92
2021. 9. 14. 10:48
#include <iostream>
using namespace std;
#pragma warning(disable:4996)
typedef struct Node
{
char m_strName[256]; ///< 이름
int m_nAge; ///< 나이
struct Node* m_pNext; ///< Next Node Pointer
}NODE, *LPNODE;
void InsertNode(struct Node** pHead, const char* pStrName, int nAge);
void DisplayNode(struct Node* pHead);
void DeleteNode(struct Node** node, int nAge);
int main()
{
LPNODE pHead = nullptr;
//===============================================================================
// pHead 를 함수 인자로 넘겨서 Single Linked List를 구현할 것
// ... 으로 되어있는 부분 채워넣을 것
//===============================================================================
InsertNode(&pHead, "aaa", 1);
InsertNode(&pHead, "bbb", 2);
InsertNode(&pHead, "ccc", 3);
InsertNode(&pHead, "ddd", 4);
InsertNode(&pHead, "eee", 5);
DisplayNode(pHead);
// (aaa, 1) -> (bbb, 2) -> (ccc, 3) -> (ddd, 4) -> (eee, 5)
cout << endl;
DeleteNode(&pHead, 1);
DeleteNode(&pHead, 3);
DeleteNode(&pHead, 5);
DisplayNode(pHead);
////(bbb, 2) -> (ddd, 4)
system("pause");
return 0;
}
void InsertNode(struct Node** Head, const char* pStrName, int nAge)
{
struct Node* newNode = new Node;
struct Node* prev = *Head;
newNode->m_nAge = nAge;
strcpy(newNode->m_strName, pStrName);
newNode->m_pNext = NULL;
//순차적으로 추가 1->2->3->4
//if (*Head == NULL)
//{
// *Head = newNode;
// return;
//}
//while (prev->m_pNext != NULL)
// prev = prev->m_pNext;
//prev->m_pNext = newNode;
//역순으로 추가 5->4->3->2->1
if (*Head == NULL)
{
*Head = newNode;
return;
}
else
{
newNode->m_pNext = prev;
*Head = newNode;
return;
}
}
void DisplayNode(struct Node* node)
{
while (node != NULL)
{
cout << "(" << node->m_strName << "," << node->m_nAge << ") ";
node = node->m_pNext;
if (node != NULL)
cout << "->";
}cout << endl;
}
void DeleteNode(struct Node** node, int nAge)
{
struct Node* temp;
struct Node* prev;
temp = *node;
prev = temp;
while (temp != NULL)
{
if (temp->m_nAge == nAge)
{
if (temp == *node) {
*node = (*node)->m_pNext;
return;
}
prev->m_pNext = temp->m_pNext;
delete temp;
temp = nullptr;
return;
}
prev = temp;
temp = temp->m_pNext;
}
if (temp == NULL)
{
cout << "입력 값이 없습니다." << endl;
}
}