June is Combung
노드 Full 본문
#include<stdio.h>
typedef struct node {
int data;
struct node* next; //next가 구조체를 받아야하므로. 특정 데이터 뿐만 아니라 다음 것의 주소도 받아야하므로.
}NODE;
void ex01(){
NODE n1 = {10, NULL}, n2 = {20, NULL}, n3 = {30}, n4 = {40};
n1.next = &n2;
n2.next = &n3;
n3.next = &n4;
printf("n1의 주소 : %u, n1.next : %u \n", &n1, n1.next);
printf("n2의 주소 : %u, n2.next : %u \n", &n2, n2.next);
printf("n3의 주소 : %u, n3.next : %u \n", &n3, n3.next);
printf("n4의 주소 : %u, n4.next : %u \n", &n4, n4.next);
NODE* tmp = &n1;
// tmp 를 사용하여 4개 노드의 모든 data를 printf()
while(tmp){
printf("data : %d \n" , tmp->data);
tmp = tmp->next;
}
}
void main(){
ex01();
}
#include <stdio.h>
#include <Windows.h> // exit(), system()
typedef struct Node {
int data;
struct Node* next;
} NODE;
NODE* head = NULL;
void print_all(){
NODE* tmp = head;
while(tmp){
printf("NODE: %d \n", tmp->data);
tmp = tmp->next;
}
}
/*
init() : NODE를 생성하고, 초기화해준 다음, 그 주소를 return
인자값 : int data
리턴값 : 새 노드의 주소
*/
NODE* init(int data){
NODE* tmp = (NODE*)malloc(sizeof(NODE));
tmp->data = data;
tmp->next = NULL;
return tmp;
}
/*
int remove(int data) : 리스트의 data를 찾아, 해당 노드를 삭제 (단, 연결 유지!)
삭제 성공 : return 1
삭제 실패 : return 0 (<== 삭제할 원소가 리스트에 없을 때)
*/
int remove(NODE** node, int data){
if(!*node){
return 0;
}
if((*node)->data == data){
*node = (*node)->next;
return 1;
}
return remove(&(*node)->next,data);
}
void add(int data){
NODE** tmp = &head;
while(*tmp){
tmp = &(*tmp)->next;
}
*tmp = (NODE*)malloc(sizeof(NODE));
(*tmp)->data = data;
(*tmp)->next = NULL;
}
void main(){
int data;
int select;
while(1){
printf("1. 노드 추가\n");
printf("2. 노드 모두 보기 \n");
printf("3. 노드 삭제 \n");
printf("0. 종료하기 \n");
printf("선택 : "); scanf_s("%d", &select);
if(select == 1){
printf("새 노드 : "); scanf_s("%d", &data);
add(data);
}
else if(select == 2){
printf("--- 노드 리스트 ---\n");
print_all();
}
else if(select == 3){
printf("삭제할 노드 : "); scanf_s("%d", &data);
if(remove(&head,data)){
printf("삭제 성공! \n");
}
else {
printf("삭제 실패..\n");
}
}
else if(select == 0){
printf("프로그램 종료 \n");
exit(0);
}
else{
printf("다시 입력하세요.\n");
}
system("pause");
system("cls");
}
}
'C > 동적할당' 카테고리의 다른 글
학생 (0) | 2021.03.29 |
---|---|
동적할당과 정적할당 (0) | 2021.03.29 |
노드 (0) | 2021.03.29 |
Comments