#include <iostream>


using namespace std;


struct Data

{

int nData;

Data* pNext;

};


Data* pHead = 0;


void Add();

void Display();

void All_Delete();

void Delete();

void Insert();


void main()

{

while (1)

{

int select = 0;


cout << "링크드 리스트 예제" << endl;

cout << "데이터 입력(1) / 데이터 출력(2) / 데이터 전체 삭제(3) / " << endl;

cout << "데이터 삭제(4) / 데이터 삽입(5) : ";

cin >> select;


switch (select)

{

case 1 :

Add();

break;

case 2 :

Display();

break;

case 3 :

All_Delete();

break;

case 4 :

Delete();

break;

case 5 :

Insert();

break;

}

}

}


void Add()

{

int input = 0;


cout << "데이터 입력(정수만 가능) : ";

cin >> input;


if (pHead == 0)//노드 처음 생성 및 데이터 입력

{

pHead = new Data;//pHead에 메모리 할당.

pHead->nData = input;//pHead 노드의 데이터 저장 변수에 입력된 데이터를 저장.

pHead->pNext = 0;//다음 노드의 주소값을 저장할 포인트 변수를 NULL로 초기화.

}

else//이후 노드의 추가 생성 및 데이터 입력.

{

Data* temp = pHead;//pHead를 temp에 복사.

while (temp->pNext)//복사된 temp가 가진 pNext에 담긴 다음 노드의 주소값이 NULL인지 아닌지 확인.

{//NULL이 아니면 아래의 것을 실행.

temp = temp->pNext;//temp노드가 가진 다음 노드의 주소값을 temp에 복사.

}

temp->pNext = new Data;//temp노드가 가진 다음 노드의 포인트 변수에 새로운 노드 생성 및 연결.

temp = temp->pNext;//temp노드가 가진 다음 노드의 주소값을 temp에 복사.

temp->nData = input;//노드에 입력된 데이터를 저장.

temp->pNext = 0;//다음 노드의 주소값을 저장할 포인트 변수를 NULL로 초기화.

}

}


void Display()

{

//저장된 데이터를 확인

if (pHead == 0)

{

cout << "데이터가 없습니다." << endl;

}

else//저장된 데이터 출력

{

Data* temp = pHead;//pHead를 temp에 복사.

cout << "입력된 데이터" << endl;

cout << temp->nData << endl;//저장된 데이터를 출력

while (temp->pNext)//복사된 temp가 가진 pNext에 담긴 다음 노드의 주소값이 NULL인지 아닌지 확인.

{//NULL이 아니면 아래의 것을 실행.

temp = temp->pNext;//temp에 temp->pNext가 가리키는 다음 노드의 주소를 연결!

cout << temp->nData << endl;

}

cout << "데이터 출력 완료" << endl;

}

}


void All_Delete()

{

//저장된 데이터를 확인

if (pHead == 0)

{

cout << "데이터가 없습니다." << endl;

}

else

{

Data* temp = pHead;//pHead를 temp에 복사.

while (pHead)//노드의 끝까지 반복. NULL이면 그만!

{

temp = temp->pNext;//temp에다가 temp->pNext에 담긴 다음 노드의 주소를 연결.

delete pHead;//앞 노드를 삭제.

pHead = temp;//temp노드를 pHead에 복사.

}

//pHead = 0;

cout << "모든 데이터를 삭제하였습니다." << endl;

}

}


void Delete()

{

int d = 0;

cout << "삭제하고 싶은 데이터의 값을 입력해 주세요." << endl;

cout << "입력 : ";

cin >> d;


Data* A_temp = 0;

Data* temp = pHead;

while (temp)

{

if (pHead->nData != d && temp->nData == d)

{

A_temp->pNext = temp->pNext;

temp = 0;

}

else if (pHead->nData == d)

{

temp = temp->pNext;

pHead = 0;

pHead = temp;

}

else

{

A_temp = temp;

temp = temp->pNext;

}

}

}


void Insert()

{

int input = 0;

Data* temp = 0;//삽입할 노드 생성


cout << "데이터 입력(정수만 가능) : ";

cin >> input;


if (pHead == 0)

cout << "저장된 데이터가 없습니다." << endl;

else

{

temp = new Data;//삽입할 노드의 메모리 할당.

temp->nData = input;//삽입할 노드의 데이터 저장 변수에 입력된 데이터를 저장.

temp->pNext = pHead->pNext;//삽입할 노드가진 다음 노드의 주소 변수에 이전 노드가 가진 다음 노드의 주소값을 복사.

pHead->pNext = temp;//이전 노드가 가진 다음 노드의 주소 변수에 삽입한 노드의 주소값을 복사.

}

}

'[C], [ C++]' 카테고리의 다른 글

링크드 리스트(Queue)  (0) 2015.05.28
링크드 리스트 클래스 - Linked_List  (0) 2015.05.28
선택 정렬 - Selection Sort  (0) 2015.05.28
퀵 정렬 - Quick Sort  (0) 2015.05.28
삽입 정렬 - Insert Sort  (0) 2015.05.28

+ Recent posts