1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*노드 개수를 박으면 자동으로 개수만큼의 노드를 가진 연결리스트를 싸는 프로그램
 *노드에 데이터 넣는 걸 인간이 할지, 알아서 할지는 함수로 조절 한다.*/
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node {
    int num;
    struct Node* link;
} Node;
 
typedef struct LinkedList {
    Node* phead;
    int length;
} LinkedList;
 
const int NODE_SIZE = sizeof(Node);
 
void insertNode(Node** pHead, Node* prev, Node* newNode);
Node* makeNode(void);
int userInput_int(void);
LinkedList makeLinkedList(int length);
 
int main(){
    int len;
    LinkedList list0;
    Node* traveler;
 
    printf("how many node?");
    scanf("%d", &len);
 
    list0 = makeLinkedList(len);
 
    printf("만든 연결리스트 길이 %d \n",list0.length);
    
    traveler = list0.phead;
    while(traveler != NULL){
        
        printf("%d \n", traveler->num);
        traveler = traveler->link;
    }
 
    return 0;
}
 
//삽입함수 : 새로운 노드를 연결리스트에 삽입하는 함수다. 
//1. phead == NULL, prev == NULL : 빈 연결리스트에 삽입
//2. phead != NULL, prev == NULL : 리스트의 가장 앞쪽에 삽입
//3. phead != NULL, prev != NULL : 리스트의 중간 혹은 끝에 삽입.
void insertNode(Node** phead, Node* prev, Node* newNode)
{
    if(*phead == NULL){//        빈 리스트에 삽입
        *phead = newNode;
        newNode->link = NULL;
    }
    else if(prev == NULL){//    가장 앞쪽에 삽입
        newNode->link = *phead;    
        *phead = newNode;
    }
    else{//                        끝이나 중간에 삽입
        newNode->link = prev->link;
        prev->link = newNode;
    }
}
 
//자기참조 구조체 생성함수 : 데이터를 입력하면 그 데이터를 가지고 연결되지 않은 노드 하나를 생성한다.
Node* makeNode(void)
{
    Node* node = (Node*)malloc(NODE_SIZE);
    node->num = userInput_int();
    node->link = NULL;
 
    return node;
}
 
//정수데이터를 사용자가 입력시킬 때 쓰는 함수.
int userInput_int(void)
{
    int temp;
    printf("만들 노드가 가질 데이터(정수)를 입력하라.    ");
    scanf("%d", &temp);
 
    return temp;
}
 
//길이를 입력하면 그 길이만큼의 연결리스트를 생성한다.
LinkedList makeLinkedList(int length)
{
    int i;
    Node* phead = NULL;
    Node* prevNode = NULL;
    LinkedList linkedList;
 
    for(i = 0; i < length; i++){
        Node* nowNode = makeNode();//생성
 
        insertNode(&phead, prevNode, nowNode);//삽입
        prevNode = nowNode;
    }
 
    linkedList.length = length;
    linkedList.phead = phead;
    return linkedList;
}
cs


출력



연결리스트의 생성까지만 만듬.

이제 요기에 노드를 넣고 빼고 바꾸고 찾는 함수들을 만들 예정.


조언대로 책을 안 보고 걍 인터넷에서 ppt 좀 보고 만들었습니다.

그러니까

지금은 아니지만 중대한 문제가 될 수 있는것 

거슬리거나 맘에 안드는 것 등을 지적해주시길


지적충 등판좀!