이중 링크드 리스트 구현..
삽입 삭제, 출력만 우선 구현....
#include
#include
#include
using namespace std;
class DoubleNode
{
private:
int data;
public:
DoubleNode* pRlink;
DoubleNode* pLlink;
public:
int GetData()
{
return data;
}
void InputData(int num)
{
data=num;
}
};
class DoubleList
{
public:
int CurrentCount;
DoubleNode HeadNode;
public:
DoubleList()
{
CurrentCount=0;
HeadNode.pLlink=&HeadNode;
HeadNode.pRlink=&HeadNode;
cout <<"더블리스트 생성"<pLlink=NULL;
NewNode->pRlink=NULL;
PreNode=&HeadNode;
for(int i=0;i<
position;i++)
{
PreNode=PreNode->pRlink;
}
NewNode->pLlink=PreNode;
NewNode->pRlink=PreNode->pRlink;
PreNode->pRlink=NewNode;
NewNode->pRlink->pLlink=NewNode;
CurrentCount++;
}
else
{
cout <<"리스트 생성에 실패하였습니다" << endl;
}
}
void DeleteDoubleList(int position)
{
DoubleNode* DelNode=NULL;
DoubleNode* PreNode=NULL;
PreNode=&HeadNode;
for(int i=0;i<
position;i++)
{
PreNode=PreNode->pRlink;
}
DelNode=PreNode->pRlink;
PreNode->pRlink=DelNode->pRlink;
DelNode->pRlink->pLlink=PreNode;
delete DelNode;
DelNode=NULL;
if(DelNode==NULL)
{
cout << "정상적으로 소멸되었습니다."<< endl;
CurrentCount--;
}
else
cout << "메모리 해제에 실패하였습니다" << endl;
}
void ShowAllList()
{
DoubleNode* Node=NULL;
Node=HeadNode.pRlink;
for(int i=0;i<
CurrentCount;i++)
{
cout << "[" << i << "]" << " " << Node->GetData() << " ";
Node=Node->pRlink;
}
cout << endl;
cout << "모든 데이터 출력완료"<< endl;
}
};
int main()
{
DoubleList list;
DoubleNode a, b, c;
a.InputData(1);
b.InputData(2);
c.InputData(3);
cout << "0번째위치 a데이터 1 추가" << endl;
list.AddDoubleList(0,a);
list.ShowAllList();
cout << endl;
cout << "0번째위치 b데이터 2 추가" << endl;
list.AddDoubleList(0,b);
list.ShowAllList();
cout << endl;
cout << "1번째위치 c데이터 3 추가" << endl;
list.AddDoubleList(1,c);
list.ShowAllList();
cout << endl;
cout << "1번째 위치 데이터 삭제" << endl;
cout << "삭제전 " << endl;
list.ShowAllList();
cout << endl;
cout << "삭제후 " << endl;
list.DeleteDoubleList(1);
list.ShowAllList();
cout << endl;
getch();
return 0;
}
구현하면서 어려웠던 점은..
가장 기초적인 포인터에 대해...개념을 잊고 있었던것..젠장..붙여넣으니 소스가 또 깨짐....해결방법은 나중에..
1. 무언가 new로 생성할때에는 메모리 할당이므로..값을 넣어주기 위한..
예를 들어..int *ptr = new int;
의 경우..*ptr = 10 이런식으로..
단순 주소를 받는거라면..할 필요가...없음
int *ptr;
int a=10;;
ptr=&a; 이런식이 된다는 것..
2. for문시..
int j=0;
for(int i=0;i<j;i++)
{
내용
}
내용은 적용이 안된다....조건식이 안되기 때문..
간단한것도 제대로 이해하지 않으면....이런 결과가 나온다 반성..