반응형
개요
- 자료구조 는 사실 컴퓨터공학을 전공하면 꼭 필요한 과목이라고 생각한다.
- 자료구조에서 배우는 메모리 관리와 다양한 알고리즘들은 언어에 구애받지 않고 어디에서나 쓰이기 때문이다.
- 그렇기에 오늘은 자료구조의 Linked list에 대해서 배워보겠다.
Linked-list
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// newnode
// 단순 연결 리스트의 노드 구조를 구조체로 정의
typedef struct ListNode {
char data[10];
struct ListNode *link;
}listNode;
// 리스트 시작을 나타내는 head 노드를 구조체로 정의
typedef struct {
listNode *head;
}linkedList_h;
// 공백 연결 리스트를 생성하는 연산
linkedList_h* createLinkedList_h(void) {
linkedList_h* L;
L = (linkedList_h*)malloc(sizeof(linkedList_h));
L->head = NULL; // 공백 리스트이므로 NULL로 설정
return L;
}
// 첫 번째 노드로 삽입하는 연산
void add_a_node_at_front(linkedList_h *L, char* str) { // call by reference 방식 head가 제일먼저 참조하는 node
listNode * newnode;
newnode = (listNode*)malloc(sizeof(listNode));
strcpy(newnode->data, str); // strcpy(newnode가 가리킬 데이터타입, str 가리킬 데이터에 저장하는값
newnode->link = L->head;
L->head = newnode;
}
// 마지막 노드로 삽입하는 연산
void add_a_node_at_rear(linkedList_h* L, char *str) {
listNode * newnode; // listNode 가 가리키는 newnode를 만들어준다
listNode * tmp;
newnode = (listNode*)malloc(sizeof(listNode)); // newnode에 공간을 만들어준다..listNode의 크기만큼
strcpy(newnode->data, str);
newnode->link = NULL; // 할당한 노드가 NULL로 설정한다.
tmp = L->head; // tmp 가 노드를 가리킨다.
while (tmp->link != NULL) {
tmp = tmp->link;
} // 현재 리스트의 마지막 노드를 찾는다.
tmp->link = newnode; // 새 노드를 마지막 노드(tmp)의 다음 노드로 연결
}
// 삽입한 순서대로 출력한다..!
void printList(linkedList_h*L) {
listNode* p;
int i = 1;
p = L->head; // p 가 노트를 가리킨다.!
while (p != NULL) { // p가 다 존재하는 노드이면 밑에 있는걸 출력한다.
printf(" [%d] %s", i++, p->data);
p = p->link; // 그다음노드를 가리키기 위한것
}
}
int main() {
linkedList_h *L;
L = createLinkedList_h();
add_a_node_at_front(L, "수");
printList(L);
printf("\n");
add_a_node_at_rear(L, "금");
printList(L);
printf("\n");
add_a_node_at_front(L, "월");
printList(L);
printf("\n");
return 0;
}
결과
반응형
'알고리즘 & 자료구조 > 자료구조' 카테고리의 다른 글
자료구조 (원형 큐) (0) | 2019.12.02 |
---|---|
자료구조 (연결 스택) (0) | 2019.12.02 |
자료구조 (순차 스택) (0) | 2019.12.02 |
자료구조 병합정렬 , 셸정렬 (0) | 2019.11.26 |
자료구조 선택정렬, 버블정렬, 삽입정렬 (4) | 2019.11.26 |