새싹교실/2014/다빈치인재반/7회차 (rev. 1.15)
- 구조체와 구조체 포인터, 링크드 리스트에 대해 배웠는데요. 아직 포인터도 배운 적이 없어서 어려운 부분이 없잖아 있지만 걱정했던 만큼 따라가기 힘들거 같지는 않습니다. 수업도 설명을 잘해주셔서 이해가 잘 됐고요. 이번 주부터 정식으로 이 새싹교실에 참여하게 됐는데, 잘 부탁드립니다.
- 링크드 리스트라는 자료 구조를 배웠습니다. 이해는 되었는데, 이걸 구현하는 건 많은 시간을 요할 것 같군요 ㅠㅠ 암튼 매 시간마다 새로운 것들을 배워서 재미있습니다. 새싹 교실이 바쁜 생활 가운데에서도 계속 프로그래밍과의 끈을 놓지 앉게 하는 귀중한 원동력이 되고 있네요. 권영기 선배님 항상 감사합니다
- 링크드 리스트를 구현해봤습니다. 영기형이 주신 코드를 배낀거나 다름없는 수준이지만(...) 나름 열심히 구현했습니다.
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
node *link;
};
node head;
node* head_p = &head;
int insert(int num, int item)
{
node* newnode;
node* beforenode = head_p;
int count=1;
if (num < 1 || num > head.data + 1)
{
printf("잘못된 값입니다. 현재 %d개의 node가 있습니다.\n", head.data);
return 0;
}
while (count < num)
{
count++;
beforenode = beforenode->link;
}
newnode = (node*)malloc(sizeof(node));
newnode->data = item;
newnode->link = beforenode->link;
beforenode->link = newnode;
head.data++;
return 0;
}
int get(int num)
{
node* node = head_p->link;
int count = 1;
if (num < 1 || num > head.data)
{
printf("잘못된 값입니다. 현재 %d개의 node가 있습니다.\n", head.data);
return 0;
}
while (count < num)
{
count++;
node = node->link;
}
printf("%d번째 node의 item은 %d\n",num, node->data);
return 0;
}
int delet(int num)
{
node* beforenode = head_p;
node* deletenode;
int count = 1;
if (num < 1 || num > head.data)
{
printf("잘못된 값입니다. 현재 %d개의 node가 있습니다.\n",head.data);
return 0;
}
while (count < num)
{
count++;
beforenode = beforenode->link;
}
deletenode = beforenode->link;
beforenode->link = deletenode->link;
free(deletenode);
head.data--;
return 0;
}
int main()
{
int i;
int num;
int temp;
int a, b;
head.data = 0; //만들어진 node의 갯수를 의미한다.
head_p->link = NULL;
printf("처음에 만들 Node의 숫자를 입력해주세요.(item값은 그 node의 순번으로 초기화됨)");
scanf("%d", &num);
for (i = 1; i <= num; i++)
insert(i, i);
while (1)
{
printf("insert : 1, delete : 2, get : 3, end : 4 \t");
scanf("%d", &temp);
switch (temp)
{
case 1:
printf("몇번째에 넣으실건가요?");
scanf("%d", &a);
printf("넣을 값을 알려주세요. (int형)");
scanf("%d", &b);
insert(a, b);
break;
case 2:
printf("몇번째 node를 삭제하실건가요?");
scanf("%d", &a);
delet(a);
break;
case 3:
printf("몇번째 node를 보여드릴까요?");
scanf("%d", &a);
get(a);
break;
case 4:
printf("종료합니다.\n");
return 0;
default :
printf("제대로 된 값을 입력해주세요.");
}
}
}