More actions
imported>trailblaze No edit summary |
(Repair batch-0005 pages from live compare) |
||
| (18 intermediate revisions by 4 users not shown) | |||
| Line 1: | Line 1: | ||
__TOC__ | |||
= 계획 = | |||
* 구조체 포인터 | |||
* 링크드 리스트 | |||
= 참여자 = | |||
{| class="wikitable" | |||
|- | |||
| 강사 | |||
| [[권영기]] | |||
| O | |||
|- | |||
| rowspan="4" | 새싹 | |||
| [[금강현]] | |||
| X | |||
|- | |||
| [[권준혁]] | |||
| X | |||
|- | |||
| [[이지수]] | |||
| O | |||
|- | |||
| [[김정민]] | |||
| O | |||
|- | |||
| rowspan="1" | 청강생 | |||
| [[성훈]] | |||
| O | |||
|} | |||
= 후기 = | |||
=== 김정민 === | |||
* 구조체와 구조체 포인터, 링크드 리스트에 대해 배웠는데요. 아직 포인터도 배운 적이 없어서 어려운 부분이 없잖아 있지만 걱정했던 만큼 따라가기 힘들거 같지는 않습니다. 수업도 설명을 잘해주셔서 이해가 잘 됐고요. 이번 주부터 정식으로 이 새싹교실에 참여하게 됐는데, 잘 부탁드립니다. | |||
=== 이지수 === | |||
* 링크드 리스트라는 자료 구조를 배웠습니다. 이해는 되었는데, 이걸 구현하는 건 많은 시간을 요할 것 같군요 ㅠㅠ 암튼 매 시간마다 새로운 것들을 배워서 재미있습니다. 새싹 교실이 바쁜 생활 가운데에서도 계속 프로그래밍과의 끈을 놓지 앉게 하는 귀중한 원동력이 되고 있네요. 권영기 선배님 항상 감사합니다 :-) | |||
=== 권영기 === | |||
* 이번 주에 못 본 친구들은 아쉽고, 열심히 들어준 다른 친구들 참 고맙습니다. 퀄리티가 떨어짐에도 불구하고 열심히 따라와줘서 기분이 좋네요. 자료 구조를 수업하기로 한 이상 그래프까지 다 나가고 싶습니다만, 이번 학기도 이제 몇 주 남지 않아서 어떻게 해야될지 걱정입니다. 이럴줄 알았으면 더 자주할 것 그랬네요. :) | |||
= 숙제 = | |||
=== 김정민 === | |||
* 링크드 리스트를 구현해봤습니다. 영기형이 주신 코드를 배낀거나 다름없는 수준이지만(...) 나름 열심히 구현했습니다. | |||
#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("제대로 된 값을 입력해주세요."); | |||
} | |||
} | |||
} | |||
=== 권준혁 === | |||
링크드 리스트 만들었습니다 | |||
지원되는 함수는 입력, 제거(n번째 노트, 제일 마지막 노드 제거 지원), 값으로 탐색, 출력입니다 | |||
main.cpp | |||
{ | |||
#include "Linkedlist.h" | |||
void main(){ | |||
int trigger, input; | |||
int temp; | |||
while(1) | |||
{ | |||
printf("신나고 재미있는 링크드 리스트 놀이! 1:입력 2 :제거 3:찾기 4:출력 5:종료\n"); | |||
scanf("%d", &trigger); | |||
fflush(stdin); | |||
switch(trigger) | |||
{ | |||
case 1: | |||
printf("저장할 숫자를 입력해주세요"); | |||
scanf("%d", &input); | |||
createNode(input); | |||
break; | |||
case 2: | |||
if(node_start == NULL){ | |||
printf("노드가 하나도 없습니다. 노드를 만들어주세요\n"); | |||
break; | |||
} | |||
printf("몇번째 노드를 제거합니까? 0을 입력받으면 가장 뒤의 노드를 제거합니다"); | |||
scanf("%d", &input); | |||
deleteNode(input); | |||
break; | |||
case 3: | |||
if(node_start == NULL){ | |||
printf("노드가 하나도 없습니다. 노드를 만들어주세요\n"); | |||
break; | |||
} | |||
printf("어떤 수를 가진 노드를 찾습니까? "); | |||
scanf("%d", &input); | |||
temp = findNode(input); | |||
if(temp == 0){ | |||
printf("그런건 없습니다\n"); | |||
break; | |||
} | |||
else{ | |||
printf("%d번째의 노드가 가지고 있습니다\n", temp); | |||
} | |||
break; | |||
case 4: | |||
printNode(); | |||
break; | |||
case 5: | |||
return; | |||
break; | |||
default: | |||
printf("다시 입력해주세요\n"); | |||
} | |||
} | |||
} | |||
} | |||
Linkedlist.h | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
typedef struct node{ | |||
int content; | |||
node* nextnode; | |||
} node; | |||
node* node_start = NULL; | |||
void createNode(int content){ | |||
node* node_p; | |||
node_p = (node*)malloc(sizeof(node)); | |||
node_p->content = content;//새 노드를 만들었다 | |||
node_p->nextnode = NULL;//새 노드를 만들엇다 | |||
if(node_start == NULL)//아무 노드도 없을때 | |||
{ | |||
node_start = node_p;//그건 시작노드로 | |||
printf("시작 노드를 만들었습니다\n"); | |||
} | |||
else | |||
{ | |||
node* temp_node;//임시 노드 포인터 | |||
temp_node = node_start->nextnode; | |||
if(temp_node ==NULL){//노드 스타트 다음에 없을때를 대비 | |||
node_start->nextnode = node_p; | |||
printf("만들었습니다\n"); | |||
return; | |||
} | |||
while(temp_node->nextnode != NULL) | |||
temp_node = temp_node->nextnode;//temp_node 다음 노드가 없을때까지 반복 | |||
temp_node->nextnode = node_p;//temp_node가 가르키는 노드의 다음 노드로 node_p를 지목 | |||
printf("만들었습니다\n"); | |||
} | |||
} | |||
void deleteNode(int num)//num째 노드를 지운다. 0이면 제일 뒤에 있는 걸 지운다 //문제있다 | |||
{ | |||
if(node_start == NULL) | |||
{ | |||
printf("먼저 노드를 생성해주세요!\n"); | |||
return; | |||
} | |||
node* temp_node = node_start; | |||
node* before_node; | |||
if (num==1) | |||
{ | |||
node_start = temp_node->nextnode; | |||
free(temp_node); | |||
printf("1번째 노트 할당 해제했습니다\n"); | |||
return; | |||
} | |||
for(int i=2;;i++) | |||
{ | |||
if(num == 0 && temp_node->nextnode == NULL){//temp그게 마지막꺼임 | |||
before_node->nextnode = NULL; | |||
free(temp_node); | |||
printf("마지막 노드를 할당해제했습니다\n"); | |||
return; | |||
} | |||
before_node = temp_node; //i-1번째 | |||
temp_node = temp_node->nextnode; //i번째 | |||
if(temp_node == NULL)//이제 끝이다 | |||
{ | |||
printf("입력하신 숫자만큼의 노드가 아직 존재하지 않습니다\n"); | |||
return; | |||
} | |||
if(num == i)//도착 | |||
{ | |||
if(temp_node == NULL) before_node->nextnode = NULL;//도착했는데 마지막 지점일때 | |||
else before_node->nextnode = temp_node->nextnode; | |||
free(temp_node); | |||
printf("%d번째 노드 할당해제했습니다\n", i); | |||
return; | |||
} | |||
} | |||
} | |||
int findNode(int content) //0은 못찾은거 -1 | |||
{ | |||
if(node_start == NULL) | |||
{ | |||
printf("노드를 생성해주세요!\n"); | |||
return 0; | |||
} | |||
node* temp_node = node_start; | |||
int i= 1; | |||
while(temp_node != NULL) | |||
{ | |||
if(temp_node->content == content) return i; | |||
temp_node = temp_node->nextnode; | |||
i++; | |||
} | |||
return 0;//그곳에서도 낙원은 없었어 | |||
} | |||
void printNode() | |||
{ | |||
node* temp_node = node_start; | |||
while(temp_node != NULL){ | |||
printf("%d ", temp_node->content); | |||
temp_node = temp_node->nextnode; | |||
} | |||
printf("\n"); | |||
} | |||
} | |||
---- | |||
[[새싹교실/2014]], [[새싹교실/2014/다빈치인재반]] | |||
Latest revision as of 00:45, 27 March 2026
계획
- 구조체 포인터
- 링크드 리스트
참여자
| 강사 | 권영기 | O |
| 새싹 | 금강현 | X |
| 권준혁 | X | |
| 이지수 | O | |
| 김정민 | O | |
| 청강생 | 성훈 | O |
후기
김정민
- 구조체와 구조체 포인터, 링크드 리스트에 대해 배웠는데요. 아직 포인터도 배운 적이 없어서 어려운 부분이 없잖아 있지만 걱정했던 만큼 따라가기 힘들거 같지는 않습니다. 수업도 설명을 잘해주셔서 이해가 잘 됐고요. 이번 주부터 정식으로 이 새싹교실에 참여하게 됐는데, 잘 부탁드립니다.
이지수
- 링크드 리스트라는 자료 구조를 배웠습니다. 이해는 되었는데, 이걸 구현하는 건 많은 시간을 요할 것 같군요 ㅠㅠ 암튼 매 시간마다 새로운 것들을 배워서 재미있습니다. 새싹 교실이 바쁜 생활 가운데에서도 계속 프로그래밍과의 끈을 놓지 앉게 하는 귀중한 원동력이 되고 있네요. 권영기 선배님 항상 감사합니다 :-)
권영기
- 이번 주에 못 본 친구들은 아쉽고, 열심히 들어준 다른 친구들 참 고맙습니다. 퀄리티가 떨어짐에도 불구하고 열심히 따라와줘서 기분이 좋네요. 자료 구조를 수업하기로 한 이상 그래프까지 다 나가고 싶습니다만, 이번 학기도 이제 몇 주 남지 않아서 어떻게 해야될지 걱정입니다. 이럴줄 알았으면 더 자주할 것 그랬네요. :)
숙제
김정민
- 링크드 리스트를 구현해봤습니다. 영기형이 주신 코드를 배낀거나 다름없는 수준이지만(...) 나름 열심히 구현했습니다.
#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("제대로 된 값을 입력해주세요.");
}
}
}
권준혁
링크드 리스트 만들었습니다
지원되는 함수는 입력, 제거(n번째 노트, 제일 마지막 노드 제거 지원), 값으로 탐색, 출력입니다
main.cpp
{
#include "Linkedlist.h"
void main(){
int trigger, input;
int temp;
while(1)
{
printf("신나고 재미있는 링크드 리스트 놀이! 1:입력 2 :제거 3:찾기 4:출력 5:종료\n");
scanf("%d", &trigger);
fflush(stdin);
switch(trigger)
{
case 1:
printf("저장할 숫자를 입력해주세요");
scanf("%d", &input);
createNode(input);
break;
case 2:
if(node_start == NULL){
printf("노드가 하나도 없습니다. 노드를 만들어주세요\n");
break;
}
printf("몇번째 노드를 제거합니까? 0을 입력받으면 가장 뒤의 노드를 제거합니다");
scanf("%d", &input);
deleteNode(input);
break;
case 3:
if(node_start == NULL){
printf("노드가 하나도 없습니다. 노드를 만들어주세요\n");
break;
}
printf("어떤 수를 가진 노드를 찾습니까? ");
scanf("%d", &input);
temp = findNode(input);
if(temp == 0){
printf("그런건 없습니다\n");
break;
}
else{
printf("%d번째의 노드가 가지고 있습니다\n", temp);
}
break;
case 4:
printNode();
break;
case 5:
return;
break;
default:
printf("다시 입력해주세요\n");
}
}
}
}
Linkedlist.h
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int content;
node* nextnode;
} node;
node* node_start = NULL;
void createNode(int content){
node* node_p;
node_p = (node*)malloc(sizeof(node));
node_p->content = content;//새 노드를 만들었다
node_p->nextnode = NULL;//새 노드를 만들엇다
if(node_start == NULL)//아무 노드도 없을때
{
node_start = node_p;//그건 시작노드로
printf("시작 노드를 만들었습니다\n");
}
else
{
node* temp_node;//임시 노드 포인터
temp_node = node_start->nextnode;
if(temp_node ==NULL){//노드 스타트 다음에 없을때를 대비
node_start->nextnode = node_p;
printf("만들었습니다\n");
return;
}
while(temp_node->nextnode != NULL)
temp_node = temp_node->nextnode;//temp_node 다음 노드가 없을때까지 반복
temp_node->nextnode = node_p;//temp_node가 가르키는 노드의 다음 노드로 node_p를 지목
printf("만들었습니다\n");
}
}
void deleteNode(int num)//num째 노드를 지운다. 0이면 제일 뒤에 있는 걸 지운다 //문제있다
{
if(node_start == NULL)
{
printf("먼저 노드를 생성해주세요!\n");
return;
}
node* temp_node = node_start;
node* before_node;
if (num==1)
{
node_start = temp_node->nextnode;
free(temp_node);
printf("1번째 노트 할당 해제했습니다\n");
return;
}
for(int i=2;;i++)
{
if(num == 0 && temp_node->nextnode == NULL){//temp그게 마지막꺼임
before_node->nextnode = NULL;
free(temp_node);
printf("마지막 노드를 할당해제했습니다\n");
return;
}
before_node = temp_node; //i-1번째
temp_node = temp_node->nextnode; //i번째
if(temp_node == NULL)//이제 끝이다
{
printf("입력하신 숫자만큼의 노드가 아직 존재하지 않습니다\n");
return;
}
if(num == i)//도착
{
if(temp_node == NULL) before_node->nextnode = NULL;//도착했는데 마지막 지점일때
else before_node->nextnode = temp_node->nextnode;
free(temp_node);
printf("%d번째 노드 할당해제했습니다\n", i);
return;
}
}
}
int findNode(int content) //0은 못찾은거 -1
{
if(node_start == NULL)
{
printf("노드를 생성해주세요!\n");
return 0;
}
node* temp_node = node_start;
int i= 1;
while(temp_node != NULL)
{
if(temp_node->content == content) return i;
temp_node = temp_node->nextnode;
i++;
}
return 0;//그곳에서도 낙원은 없었어
}
void printNode()
{
node* temp_node = node_start;
while(temp_node != NULL){
printf("%d ", temp_node->content);
temp_node = temp_node->nextnode;
}
printf("\n");
}
}