U E D R , A S I H C RSS

새싹교실/2014/다빈치인재반/7회차 (rev. 1.19)

새싹교실/2014/다빈치인재반/7회차


1. 계획


  • 구조체 포인터
  • 링크드 리스트

2. 참여자

강사 권영기 O
새싹 금강현 X
권준혁 X
이지수 O
김정민 O
청강생 성훈 O

3. 후기

3.1. 김정민

  • 구조체와 구조체 포인터, 링크드 리스트에 대해 배웠는데요. 아직 포인터도 배운 적이 없어서 어려운 부분이 없잖아 있지만 걱정했던 만큼 따라가기 힘들거 같지는 않습니다. 수업도 설명을 잘해주셔서 이해가 잘 됐고요. 이번 주부터 정식으로 이 새싹교실에 참여하게 됐는데, 잘 부탁드립니다.

3.2. 이지수

  • 링크드 리스트라는 자료 구조를 배웠습니다. 이해는 되었는데, 이걸 구현하는 건 많은 시간을 요할 것 같군요 ㅠㅠ 암튼 매 시간마다 새로운 것들을 배워서 재미있습니다. 새싹 교실이 바쁜 생활 가운데에서도 계속 프로그래밍과의 끈을 놓지 앉게 하는 귀중한 원동력이 되고 있네요. 권영기 선배님 항상 감사합니다 :-)

3.3. 권영기

  • 이번 주에 못 본 친구들은 아쉽고, 열심히 들어준 다른 친구들 참 고맙습니다. 퀄리티가 떨어짐에도 불구하고 열심히 따라와줘서 기분이 좋네요. 자료 구조를 수업하기로 한 이상 그래프까지 다 나가고 싶습니다만, 이번 학기도 이제 몇 주 남지 않아서 어떻게 해야될지 걱정입니다. 이럴줄 알았으면 더 자주할 것 그랬네요. :)

4. 숙제

4.1. 김정민

  • 링크드 리스트를 구현해봤습니다. 영기형이 주신 코드를 배낀거나 다름없는 수준이지만(...) 나름 열심히 구현했습니다.

#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("제대로 된 값을 입력해주세요.");
		}
	} 
}

4.2. 권준혁


링크드 리스트 만들었습니다

지원되는 함수는 입력, 제거(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/다빈치인재반]
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:50
Processing time 0.0360 sec