VioletaBabel
단일 링크드 리스트 예제 본문
#include <stdio.h>
#include <stdlib.h>//malloc
#include <conio.h> //getche
#define mal (node *)malloc(sizeof(node))
struct node
{
int data;
node *next;
};
node *head, *end, *node1, *node2, *node3, *node4, *node5;
int count = 0;
char command;
void startProgram();
void insertNode(node *newnode);
void checkCommand();
void numbering();
void rebuildnode(node *change);
void startProgram()
{
printf("이 프로그램은 최대 5개까지의 숫자를 저장합니다.\n");
head = mal, end = mal;
int a;
printf("첫번째 숫자를 입력해주세요 : ");
scanf("%d", &a);
node1 = mal;
node1->data = a;
head->next = node1;
node1->next = end;
++count;
}
void insertNode(node *newnode)
{
node *indexnode;
int a;
char fact;
while (1)
{
printf("\n숫자를 입력하세요 : ");
scanf("%d", &a);
printf("원하는 숫자가 %d가 맞습니까? (맞으면 y): ", a);
fact = getche();
if (fact == 'y' || fact == 'Y') break;
}
printf("\n");
newnode->data = a;
for (indexnode = head; indexnode->next != end; indexnode = indexnode->next)
if (indexnode->next->data > newnode->data)
break;
newnode->next = indexnode->next;
indexnode->next = newnode;
++count;
numbering();
}
void checkCommand()
{
while (1)
{
printf("명령어는 다음과 같습니다.\ni=숫자 저장, o=저장중인 숫자 출력, e=종료\n명령어를 입력해주세요 : ");
command = getche();
if (command == 'i' || command == 'o' || command == 'e')
break;
printf("\n잘못 입력하셨습니다.\n");
}
}
void numbering()
{
node *indexnode = head;
for (int i = 0; count > i; ++i)
{
indexnode = indexnode->next;
printf("%d ",indexnode->data);
}
printf("\n");
}
void rebuildnode(node *change)
{
printf("\n가장 낮은 숫자는 소거됩니다.");
node *indexnode;
int a;
char fact;
while (1)
{
printf("\n숫자를 입력하세요 : ");
scanf("%d", &a);
printf("원하는 숫자가 %d가 맞습니까? (맞으면 y): ", a);
fact = getche();
if (fact == 'y' || fact == 'Y') break;
}
if (change->data >= a)
{
printf("새로 입력한 숫자가 가장 작은 수와 같거나 더 작습니다.");
}
else
{
head->next = change->next;
change->data = a;
for (indexnode = head; indexnode->next != end; indexnode = indexnode->next)
if (indexnode->next->data > change->data)
break;
change->next = indexnode->next;
indexnode->next = change;
printf("\n");
numbering();
}
}
int main()
{
startProgram();
while (1)
{
checkCommand();
if (command == 'i')
{
switch (count)
{
case 0:node1 = mal; insertNode(node1); break;
case 1:node2 = mal; insertNode(node2); break;
case 2:node3 = mal; insertNode(node3); break;
case 3:node4 = mal; insertNode(node4); break;
case 4:node5 = mal; insertNode(node5); break;
default:rebuildnode(head->next);
}
}
else if (command == 'o')
{
printf("\n");
numbering();
}
else if (command == 'e')
{
printf("\n");
return 1;
}
}
'알고리즘' 카테고리의 다른 글
최대공약수, 최소공배수 (0) | 2017.05.28 |
---|---|
[C++/함수]에라토스테네스의 체 (0) | 2017.05.28 |
단순한 이진트리 코드 (0) | 2017.04.29 |
선택, 삽입, 버블, 셸, 퀵, 기수, 병합, 힙 정렬 코드(퀵 이상함) (0) | 2017.04.27 |
트리 - 전위&중위 순회 알고리즘 (0) | 2017.04.22 |