#include "Linked_List.h"
Linked_List::Linked_List()
{
pHead = 0;
}
Linked_List::~Linked_List()
{
}
void Linked_List::Add()
{
int input = 0;
cout << "데이터 입력(정수만 가능) : ";
cin >> input;
if (pHead == 0)//노드 처음 생성 및 데이터 입력
{
pHead = new Linked_List;//pHead에 메모리 할당.
pHead->Data = input;//pHead 노드의 데이터 저장 변수에 입력된 데이터를 저장.
pHead->pBackward = 0;//다음 노드의 주소값을 저장할 포인트 변수를 NULL로 초기화.
}
else//이후 노드의 추가 생성 및 데이터 입력.
{
Linked_List* temp = pHead;//pHead를 temp에 복사.
while (temp->pBackward)//복사된 temp가 가진 pNext에 담긴 다음 노드의 주소값이 NULL인지 아닌지 확인.
{//NULL이 아니면 아래의 것을 실행.
temp = temp->pBackward;//temp노드가 가진 다음 노드의 주소값을 temp에 복사.
}
temp->pBackward = new Linked_List;//temp노드가 가진 다음 노드의 포인트 변수에 새로운 노드 생성 및 연결.
temp = temp->pBackward;//temp노드가 가진 다음 노드의 주소값을 temp에 복사.
temp->Data = input;//노드에 입력된 데이터를 저장.
temp->pBackward = 0;//다음 노드의 주소값을 저장할 포인트 변수를 NULL로 초기화.
}
}
void Linked_List::Display()
{
//저장된 데이터를 확인
if (pHead == 0)
{
cout << "데이터가 없습니다." << endl;
}
else//저장된 데이터 출력
{
Linked_List* temp = pHead;//pHead를 temp에 복사.
cout << "입력된 데이터" << endl;
cout << temp->Data << endl;//저장된 데이터를 출력
while (temp->pBackward)//복사된 temp가 가진 pNext에 담긴 다음 노드의 주소값이 NULL인지 아닌지 확인.
{//NULL이 아니면 아래의 것을 실행.
temp = temp->pBackward;//temp에 temp->pNext가 가리키는 다음 노드의 주소를 연결!
cout << temp->Data << endl;
}
cout << "데이터 출력 완료" << endl;
}
}
void Linked_List::All_Delete()
{
//저장된 데이터를 확인
if (pHead == 0)
{
cout << "데이터가 없습니다." << endl;
}
else
{
Linked_List* temp = pHead;//pHead를 temp에 복사.
while (pHead)//노드의 끝까지 반복. NULL이면 그만!
{
temp = temp->pBackward;//temp에다가 temp->pNext에 담긴 다음 노드의 주소를 연결.
delete pHead;//앞 노드를 삭제.
pHead = temp;//temp노드를 pHead에 복사.
}
pHead = 0;
cout << "모든 데이터를 삭제하였습니다." << endl;
}
}
void Linked_List::Stack()
{
int i;
//저장된 데이터를 확인
if (pHead == 0)
{
cout << "데이터가 없습니다." << endl;
}
else
{
Linked_List* temp = 0;
Linked_List* A_temp = 0;
while (pHead)
{
temp = pHead; i = 1;
while (temp->pBackward)//노드의 끝까지 반복. NULL이면 그만!
{
A_temp = temp;
temp = temp->pBackward;
i++;
}
cout << i << "번째 데이터 출력 : " << temp->Data;
delete temp;
if (i == 1)
pHead = 0;
else
A_temp->pBackward = 0;
cout << "삭제\n";
}
cout << "모든 데이터를 삭제하였습니다." << endl;
}
}
void Linked_List::Serch()
{
int d = 0, select = 0;
Linked_List* temp = pHead;
cout << "검색 방식 선택\n";
cout << "데이터 값(1), 인덱스 값(2)\n";
cout << "입력 : ";
cin >> select;
switch (select)
{
case 1 :
cout << "찾으시려는 데이터의 값을 입력해 주세요." << endl;
cout << "입력 : ";
cin >> d;
while (temp)
{
if (temp->Data == d)
{
cout << "찾으시는 데이터를 확인하였습니다.\n";
}
else if (temp->Data == 0)
{
cout << "찾으시는 데이터가 존재하지 않습니다..\n";
}
else
{
temp = temp->pBackward;
}
}
break;
case 2 :
cout << "찾으시려는 데이터의 인덱스값을 입력해 주세요." << endl;
cout << "입력 : ";
cin >> d;
Linked_List* temp = pHead;
for (int i = 0; i < d; i++)
{
temp = temp->pBackward;
}
if (temp != 0)
{
cout << "찾으시는 인덱스의 데이터 값 : " << temp->Data << endl;
}
else
{
cout << "찾으시는 인덱스의 위치에 데이터가 존재하지 않습니다.\n";
}
break;
}
}
void Linked_List::Delete()
{
int d = 0, select = 0;
Linked_List* A_temp = 0;
Linked_List* temp = pHead;
cout << "삭제 방식 선택\n";
cout << "데이터 값(1), 인덱스 값(2)\n";
cout << "입력 : ";
cin >> select;
switch (select)
{
case 1:
cout << "삭제 하시려는 데이터의 값을 입력해 주세요." << endl;
cout << "입력 : ";
cin >> d;
while (temp)
{
if (pHead->Data != d && temp->Data == d)
{
A_temp->pBackward = temp->pBackward;
delete temp;
}
else if (pHead->Data == d)
{
temp = temp->pBackward;
delete pHead;
pHead = temp;
}
else
{
A_temp = temp;
temp = temp->pBackward;
}
}
break;
case 2:
cout << "삭제 하시려는 데이터의 인덱스값을 입력해 주세요." << endl;
cout << "입력 : ";
cin >> d;
for (int i = 0; i < d; i++)
{
A_temp = temp;
temp = temp->pBackward;
}
if (temp != 0 && pHead == temp)
{
temp = temp->pBackward;
delete pHead;
pHead = temp;
}
else if (temp != 0 && pHead != temp)
{
A_temp->pBackward = temp->pBackward;
delete temp;
}
else
{
cout << "삭제하려는 인덱스의 위치에 데이터가 존재하지 않습니다.\n";
}
break;
}
}
void Linked_List::Insert()
{
int input = 0, data = 0;
Linked_List* temp = pHead;//삽입할 노드 생성
Linked_List* A_temp = 0;//삽입할 노드 생성
cout << "삽입하고 싶은 인덱스 위치값 입력 : ";
cin >> input;
if (pHead == 0)
cout << "저장된 데이터가 없습니다." << endl;
else
{
for (int i = 0; i < (input-1); i++)
{
temp = temp->pBackward;
}
if (temp == pHead)
{
A_temp = new Linked_List;
cout << "저장할 정수 데이터 값 입력 : ";
cin >> data;
A_temp->Data = data;
A_temp->pBackward = temp;
pHead = A_temp;
}
else
{
A_temp = new Linked_List;
cout << "저장할 정수 데이터 값 입력 : ";
cin >> data;
A_temp->Data = data;
A_temp->pBackward = temp->pBackward;
temp->pBackward = A_temp;
}
}
}
'[C], [ C++]' 카테고리의 다른 글
함수 포인터 및 함수 (0) | 2015.05.28 |
---|---|
연산자 오버로딩 (0) | 2015.05.28 |
링크드 리스트(Queue) (0) | 2015.05.28 |
링크드 리스트 클래스 - Linked_List (0) | 2015.05.28 |
링크드 리스트 예제 (0) | 2015.05.28 |