"C언어 연결리스트 2"의 두 판 사이의 차이

(새 문서: ==개요== ;C언어 연결 리스트 구현 2 <source lang='c'> #include <stdio.h> #include <stdlib.h> // 노드 타입 정의 typedef struct NodeStruct { int value; struct NodeSt...)
 
101번째 줄: 101번째 줄:
==같이 보기==
==같이 보기==
* [[C언어 연결 리스트 구현]]
* [[C언어 연결 리스트 구현]]
[[분류: C]][[분류: 연결 리스트]]

2019년 10월 29일 (화) 00:35 판

1 개요

C언어 연결 리스트 구현 2
C
Copy
#include <stdio.h>
#include <stdlib.h>

// 노드 타입 정의
typedef struct NodeStruct {
	int value;
	struct NodeStruct *next;
} Node;
Node* head = NULL;

Node* createNode(int value) {
	Node* p = malloc(sizeof(Node));
	p->value = value;
	p->next = NULL;
	return p;
}

// 노드 삭제
void unsetNode(Node* node) {
	free(node);
	node = NULL;
}

// 노드 추가 
void append(Node* node) {
    if( head == NULL ) {
        head = node;
        return;
    }
    Node* p = head;
    while( p->next != NULL ) p = p->next;
    p->next = node;
}

// 선택 위치에 노드 추가
void insertAt(int index, Node* newNode) {
	if( index == 0 ) {
	    newNode->next = head;
	    head = newNode;
	    return;
	}
	Node* p = head;
	for(int i=0; i<index-1; i++) p = p->next;
    newNode->next = p->next;
	p->next = newNode;
}

// 선택 위치에 노드 추가
void deleteAt(int index) {
	if( index == 0 ) {
	    Node* u = head;
	    head = head->next;
	    unsetNode(u);
	    return;
	}
	Node* p = head;
	for(int i=0; i<index-1; i++) p = p->next;
	Node* u = p->next;
    p->next = p->next->next;
    unsetNode(u);
}

// 노드 출력
void printList() {
    Node* p = head;
	while(p != NULL) {
		printf("%d ", p->value);
		p = p->next;
	}
	printf("\n");
}

int main() {
    append(createNode(1));
    append(createNode(2));
    append(createNode(3));
    append(createNode(4));
    printList();

    insertAt(0, createNode(8));
    printList();
    insertAt(3, createNode(9));
    printList();
    
    deleteAt(0);
    printList();
    deleteAt(2);
    printList();
}
// 1 2 3 4 
// 8 1 2 3 4 
// 8 1 2 9 3 4 
// 1 2 9 3 4 
// 1 2 3 4

2 같이 보기

  • C, C++ 주석
    C에도 적용되는 주석 문법이라면, "C와 C++ 주석"으로 제목을 옮기면 어떨까요? Ykhwong
  • C, C++ 주석
    @Ykhwong 네네. 좋은 의견 입니다. 변경 부탁드려요. John Jeong
  • C, C++ 주석
    'C스타일 주석'이라는 제목도 괜찮겠네요.J Jmnote
  • C, C++ 주석
    'C, C++ 주석' 형태로 최종 가도록 하겠습니다. C와 C++ 까지의 현재 범위를 명확히 하려 합니다. John Jeong
  • C언어 연결리스트 구현
    마지막에 메모리 해지는 어떤식으로 해야되나요?? 돌멩이
  • C언어 연결리스트 구현
    @돌맹이 head 가 널까지 가는거 보시고 코드가 아름 답진 않지만 대략 아래 방법처럼 하나씩 삭제 하시면 될 것 같습니다. void deleteNode(nodeType *head) { nodeType *ptr = head, *ptr2 = NULL; while(ptr- John Jeong
  • C언어 연결리스트 구현
    답변 감사합니다! 돌멩이