#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 |