반응형

개요

  • 자료구조 는 사실 컴퓨터공학을 전공하면 꼭 필요한 과목이라고 생각한다.
  • 자료구조에서 배우는 메모리 관리와 다양한 알고리즘들은 언어에 구애받지 않고 어디에서나 쓰이기 때문이다.
  • 그렇기에 오늘은 자료구조의 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;
}

 


결과

Linked list 에 node를 추가

 


 

반응형

+ Recent posts