#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

#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::Queue()

{

int i = 1;

//저장된 데이터를 확인

if (pHead == 0)

{

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

}

else

{

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

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

{

cout << i << "번째 데이터 : " << temp->Data;

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

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

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

cout << " 삭제\n";

i++;

}

//pHead = 0;

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
링크드 리스트(Stack)  (0) 2015.05.28
링크드 리스트 클래스 - Linked_List  (0) 2015.05.28
링크드 리스트 예제  (0) 2015.05.28
선택 정렬 - Selection Sort  (0) 2015.05.28

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

temp = 0;

}

else if (pHead->Data == d)

{

temp = temp->pBackward;

pHead = 0;

pHead = temp;

}

else

{

A_temp = temp;

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::Insert()

{

int input = 0;

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


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

cin >> input;


if (pHead == 0)

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

else

{

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

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

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

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

}

}

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

링크드 리스트(Stack)  (0) 2015.05.28
링크드 리스트(Queue)  (0) 2015.05.28
링크드 리스트 예제  (0) 2015.05.28
선택 정렬 - Selection Sort  (0) 2015.05.28
퀵 정렬 - Quick Sort  (0) 2015.05.28

#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

#include <iostream>

#include <ctime>


using namespace std;


int Arrary[10] = { 5, 3, 6, 8, 4, 2, 1, 7, 10, 9 };


void Selection_Sort();


void Timer_Start();

clock_t Time_Stop();


clock_t CurTime, CheckTime;


void main()

{

/*cout << "현재 저장된 데이터의 순서\n";

for (int i = 0; i < 10; i++)

{

cout << i + 1 << "번째 : " << Arrary[i] << endl;

}*/

Selection_Sort();

/*cout << "선택 정렬 후 저장된 데이터의 순서\n";

for (int i = 0; i < 10; i++)

{

cout << i + 1 << "번째 : " << Arrary[i] << endl;

}*/

cout << Time_Stop() << endl;

}


void Selection_Sort()

{

int change_i, change_j; int i = 0; int j = 0;


for (i = 0; i < 10; i++)

{

change_i = Arrary[i];

for (j = i+1; j < 10; j++)

{

if (change_i > Arrary[j])

{

change_i = Arrary[j];

change_j = j;

}

}

if (Arrary[i] != change_i)

{

Arrary[change_j] = Arrary[i];

Arrary[i] = change_i;

}

}

}


void Timer_Start()

{

CheckTime = clock();

}


clock_t Time_Stop()

{

CurTime = clock();

return ((CurTime - CheckTime) / 1000);

}

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

링크드 리스트 클래스 - Linked_List  (0) 2015.05.28
링크드 리스트 예제  (0) 2015.05.28
퀵 정렬 - Quick Sort  (0) 2015.05.28
삽입 정렬 - Insert Sort  (0) 2015.05.28
버블 정렬(Bubble Sort)  (0) 2015.05.28

//아카데미에서 공부한답시고 대충 만든거라 문제 많다는 것이 큰 문제...

#include <iostream>

#include <ctime>


using namespace std;


int Arrary[21] = { 5, 3, 6, 8, 4, 2, 1, 7, 10, 9 , 12, 15, 13, 11, 14, 16, 18, 17, 19, 21, 20};


void Quick_Sort(int arrary[], int L_index, int R_index);

int partition(int arrary[], int L_index, int R_index);


void Timer_Start();

clock_t Time_Stop();


clock_t CurTime, CheckTime;


void main()

{

/*int i;*/

Timer_Start();

/*cout << "현재 저장된 데이터의 순서\n";

for (i = 0; i < 21; i++)

{

cout << i + 1 << "번째 : " << Arrary[i] << endl;

}*/

Quick_Sort(Arrary, 0, 20);

/*cout << "퀵 정렬 후 저장된 데이터의 순서\n";

for (int j = 0; j < 21; j++)

{

cout << j + 1 << "번째 : " << Arrary[j] << endl;

}*/

cout << Time_Stop() << endl;

}


//이거는 웹에서 찾은 예제를 내가 이해하기 쉽게 약간 바꾼거. 그닥 차이는 없다.


void Quick_Sort(int arrary[], int L_index, int R_index)

{

int point;

if (L_index < R_index)

{

point = partition(arrary, L_index, R_index);

Quick_Sort(arrary, L_index, point - 1);

Quick_Sort(arrary, point + 1, R_index);

}

}


int partition(int arrary[], int L_index, int R_index)

{

int left = L_index, right = R_index; int point = arrary[L_index], temp;

while (left<right)

{

while (left<=R_index && arrary[left] < point)

{

left++;

}

while (right>=L_index && arrary[right] > point)

{

right--;

}

if (left < right)

{

temp = arrary[left];

arrary[left] = arrary[right];

arrary[right] = temp;

}

}

temp = arrary[left];

arrary[left] = arrary[right];

arrary[right] = temp;


return right;

}


void Timer_Start()

{

CheckTime = clock();

}


clock_t Time_Stop()

{

CurTime = clock();

return ((CurTime - CheckTime) / 1000);

}

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

링크드 리스트 예제  (0) 2015.05.28
선택 정렬 - Selection Sort  (0) 2015.05.28
삽입 정렬 - Insert Sort  (0) 2015.05.28
버블 정렬(Bubble Sort)  (0) 2015.05.28
이진 검색 트리 알고리즘2  (0) 2015.05.28

//아카데미에서 공부한답시고 대충 만든거라 문제 많다는 것이 큰 문제...

#include <iostream>

#include <ctime>


using namespace std;


int Arrary[10] = { 5, 3, 6, 8, 4, 2, 1, 7, 10, 9 };


void Insert_Sort();


void Timer_Start();

clock_t Time_Stop();


clock_t CurTime, CheckTime;


void main()

{

Timer_Start();

/*cout << "현재 저장된 데이터의 순서\n";

for (int i = 0; i < 10; i++)

{

cout << i + 1 << "번째 : " << Arrary[i] << endl;

}*/

Insert_Sort();

/*cout << "삽입 정렬 후 저장된 데이터의 순서\n";

for (int i = 0; i < 10; i++)

{

cout << i + 1 << "번째 : " << Arrary[i] << endl;

}*/

cout << Time_Stop() << endl;


}


void Insert_Sort()

{

int change;


for (int i = 0; i < 9; i++)

{

change = Arrary[i + 1];

for (int j = i; j > -1 && Arrary[j] > change; j--)

{

Arrary[j + 1] = Arrary[j];

Arrary[j] = change;

}

}

}


void Timer_Start()

{

CheckTime = clock();

}


clock_t Time_Stop()

{

CurTime = clock();

return ((CurTime - CheckTime) / 1000);

}

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

선택 정렬 - Selection Sort  (0) 2015.05.28
퀵 정렬 - Quick Sort  (0) 2015.05.28
버블 정렬(Bubble Sort)  (0) 2015.05.28
이진 검색 트리 알고리즘2  (0) 2015.05.28
이진 트리 예제  (0) 2015.05.28

//아카데미에서 공부한답시고 대충 만든거라 문제 많다는 것이 큰 문제...

#include <iostream>

#include <ctime>


using namespace std;


int Arrary[10] = { 5, 3, 6, 8, 4, 2, 1, 7, 10, 9};


void Bubble_Sort();


void Timer_Start();

clock_t Time_Stop();


clock_t CurTime, CheckTime;


void main()

{

Timer_Start();

/*cout << "현재 저장된 데이터의 순서\n";

for (int i = 0; i < 10; i++)

{

cout << i+1 << "번째 : " << Arrary[i] << endl;

}*/

Bubble_Sort();


cout << Time_Stop() << endl;

/*cout << "버블 정렬 후 저장된 데이터의 순서\n";

for (int i = 0; i < 10; i++)

{

cout << i+1 << "번째 : " << Arrary[i] << endl;

}*/

}


void Bubble_Sort()

{

int Change = 0; int exit = 1; int j = 9;


while (j)

{

Change = Arrary[0];

for (int i = 0; i < j; i++)

{

if (Change > Arrary[i + 1])

{

Arrary[i] = Arrary[i + 1];

Arrary[i + 1] = Change;

}

else if (Change < Arrary[i + 1])

{

Change = Arrary[i + 1];

}

}

j--;

}

}


void Timer_Start()

{

CheckTime = clock();

}


clock_t Time_Stop()

{

CurTime = clock();

return ((CurTime - CheckTime) / 1000);

}

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

퀵 정렬 - Quick Sort  (0) 2015.05.28
삽입 정렬 - Insert Sort  (0) 2015.05.28
이진 검색 트리 알고리즘2  (0) 2015.05.28
이진 트리 예제  (0) 2015.05.28
이진 검색 트리 알고리즘(배열, 재귀함수)  (0) 2015.05.28

//아카데미에서 공부한답시고 대충 만든거라 문제 많다는 것이 큰 문제...

#include <iostream>

#include <ctime>


using namespace std;


//필요한 배열 버퍼 초기화

int Arrary[255] = { 0, };


//사용할 함수 선언

int input(int data, int index);

void Quick_Sort(int arrary[], int L_index, int R_index);

int partition(int arrary[], int L_index, int R_index);

int Search(int input, int f_index, int l_index);

double round(double value, int pos);

void show();

void Timer_Start();

clock_t Time_Stop();


clock_t CurTime, CheckTime;


void main()

{

int Random = 0; int exit = 1; int check = 0;

int i = 0; int command = 0; int I_search = 0;


while (exit)

{

cout << "이진 트리 검색 예제 프로그램\n";

cout << "랜덤 데이터 입력 작동(1)\n데이터 정렬[퀵 정렬](2)\n데이터 화면 출력(3)\n데이터 검색[이진 검색](4)\n프로그램 종료(0)\n";

cout << "입력 : ";

cin >> command;


switch (command)

{

case 1:

Timer_Start();

srand((unsigned)time(0));


for (i = 0; i < 255;)

{

Random = (rand() % 255) + 1;

// Random = (1000 * (rand() % 1000) + (rand() % 1000)) + 1;

i = input(Random, i);

}

cout << Time_Stop() << endl;

cout << "입력 완료!\n\n";

break;

case 2:

Timer_Start();

Quick_Sort(Arrary, 0, i - 1);

cout << Time_Stop() << endl;

cout << "정렬 완료!\n\n";

break;

case 3:

show();

break;

case 4:

cout << "검색할 데이터 값 입력 : ";

cin >> I_search;

check = Search(I_search, 0, i - 1);

if (check == -1)

cout << "에러!\n\n";

else 

cout << "동일한 데이터 확인 : " << Arrary[check] << ", " << "인덱스 값 : " << check << "\n\n";

break;

case 0:

exit = 0;

break;

}

}

}


int input(int data, int index)

{

for (int i = 0; i < index;)

{

if (Arrary[i] != data)

i++;

else

return index;

}

Arrary[index] = data;

return index += 1;

}


void show()

{

for (int i = 0; i < 255; i++)

{

cout << i + 1 << "번째 데이터 : " << Arrary[i] << endl;

}

cout << "\n";

}


void Quick_Sort(int arrary[], int L_index, int R_index)

{

int point;

if (L_index < R_index)

{

point = partition(arrary, L_index, R_index);

Quick_Sort(arrary, L_index, point - 1);

Quick_Sort(arrary, point + 1, R_index);

}

}


int partition(int arrary[], int L_index, int R_index)

{

int left = L_index, right = R_index; int point = arrary[L_index], temp;

while (left<right)

{

while (left <= R_index && arrary[left] < point)

{

left++;

}

while (right >= L_index && arrary[right] > point)

{

right--;

}

if (left < right)

{

temp = arrary[left];

arrary[left] = arrary[right];

arrary[right] = temp;

}

}

temp = arrary[left];

arrary[left] = arrary[right];

arrary[right] = temp;


return right;

}


int Search(int input, int f_index, int l_index)

{

int low = 0; int High = input; int mid = 0;


if (low < High)

{

mid = (int)round(((double)(l_index + f_index) / 2), 0);


if (High != Arrary[mid])

{

if (High < Arrary[mid])

{

return Search(High, f_index, mid);

}

else if (High > Arrary[mid])

{

return Search(High, mid, l_index);

}

}

else if (High == Arrary[mid])

{

//cout << "동일한 데이터 확인 : " << Arrary[mid] << ", " << "인덱스 값 : " << mid << endl;

return mid;

}

}

else

return -1;

// return 0;

}


double round(double value, int pos)

{

double temp;

temp = value * pow(10, pos);  // 원하는 소수점 자리수만큼 10의 누승을 함

temp = floor(temp + 0.5);          // 0.5를 더한후 버림하면 반올림이 됨

temp *= pow(10, -pos);           // 다시 원래 소수점 자리수로

return temp;

}


void Timer_Start()

{

CheckTime = clock();

}


clock_t Time_Stop()

{

CurTime = clock();

return ((CurTime - CheckTime) / 1000);

}

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

퀵 정렬 - Quick Sort  (0) 2015.05.28
삽입 정렬 - Insert Sort  (0) 2015.05.28
버블 정렬(Bubble Sort)  (0) 2015.05.28
이진 트리 예제  (0) 2015.05.28
이진 검색 트리 알고리즘(배열, 재귀함수)  (0) 2015.05.28

//아카데미에서 공부한답시고 대충 만든거라 문제 많다는 것이 큰 문제...

//기본적으로 링크드 리스트의 개념에 대해서 알아야지 이해가 됨.


#include <iostream>


using namespace std;


struct Tree

{

Tree *Forward;//앞 동적 메모리 주소값을 가진다.

Tree *Backward;//뒤 동적 메모리 주소값을 가진다.

int Data;//현 메모리가 가진 데이터의 값.

};


//사용하기 위해 선언한 함수들.

void Add();

void Insert(Tree* temp, int data);

void Display();

void Print(Tree* temp);

void Serch();

void Serch(Tree* temp, int data);

void All_Delete();

void All_Delete(Tree* temp);


//위 트리 구조체의 구조체 포인터 변수를 선언!

Tree* Head;


void main()

{

int exit = 1;


while (exit)

{

int select = 0;


cout << "이진 트리 예제" << endl;

cout << "데이터 입력(1) / 데이터 출력(2) / 데이터 검색(3) " << endl;

cout << "데이터 전체 삭제(4) / 프로그램 종료(6) : ";

cin >> select;



switch (select)

{

case 1 :

Add();

break;

case 2 :

Display();

break;

case 3 :

Serch();

break;

case 4 :

All_Delete();

break;

case 6 :

All_Delete();

exit = 0;

break;

}

}

}


void Add()

{

int input = 0;


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

cin >> input;


if (Head == 0)

{

Head = new Tree;

Head->Data = input;

Head->Forward = 0, Head->Backward = 0;

}

else

{

Tree* Temp = Head;

Insert(Temp, input);

}

}


void Insert(Tree* temp, int data)

{

if (temp->Data > data)

{

if (temp->Forward != 0)

{

Insert(temp->Forward, data);

}

else

{

Tree* Temp = new Tree;

Temp->Data = data;

temp->Forward = Temp, Temp->Forward = 0, Temp->Backward = 0;

}

}

else

{

if (temp->Backward != 0)

{

Insert(temp->Backward, data);

}

else

{

Tree* Temp = new Tree;

Temp->Data = data;

temp->Backward = Temp, Temp->Forward = 0, Temp->Backward = 0;

}

}

}


void Display()

{

// int display_out = 1;

if (Head == 0)

{

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

}

else

{

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

Print(Head);

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

}

}


void Print(Tree* temp)

{

if (temp != 0)

{

Print(temp->Forward);

cout << temp->Data << endl;

Print(temp->Backward);

}

}


void Serch()

{

int input = 0;


cout << "찾을 데이터를 입력해주십시오" << endl;

cout << "입력 : ";

cin >> input;


Serch(Head, input);

}


void Serch(Tree* temp, int data)

{

if(temp->Data > data)

{

if (temp->Forward != 0)

{

Serch(temp->Forward, data);

}

else

{

cout << "데이터 검색 완료 " << endl;

cout << "데이터값 " << data << "의 존재가 확인되지 않습니다." << endl;

}

}

else if (temp->Data < data)

{

if (temp->Backward != 0)

{

Serch(temp->Backward, data);

}

else

{

cout << "데이터 검색 완료 " << endl;

cout << "데이터값 " << data << "의 존재가 확인되지 않습니다." << endl;

}

}

else if (temp->Data == data)

{

cout << "데이터 검색 완료 " << endl;

cout << "데이터값 " << data << "의 존재가 확인되었습니다." << endl;

}

}


void All_Delete()

{

cout << "모든 데이터 삭제 중입니다. 잠시만 기다려 주십시오" << endl;

All_Delete(Head);

cout << "작업 완료." << endl;

Head = 0;

}


void All_Delete(Tree* temp)

{

if (temp != 0)

{

All_Delete(temp->Forward);

All_Delete(temp->Backward);

cout << temp->Data << "삭제완료\n";

delete temp;

}

}

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

퀵 정렬 - Quick Sort  (0) 2015.05.28
삽입 정렬 - Insert Sort  (0) 2015.05.28
버블 정렬(Bubble Sort)  (0) 2015.05.28
이진 검색 트리 알고리즘2  (0) 2015.05.28
이진 검색 트리 알고리즘(배열, 재귀함수)  (0) 2015.05.28

+ Recent posts