목록자료구조 (7)
헬창 개발자
평소 Python, Java만 쓰다가 프로토타입 기반 언어인 자바스크립트를 사용하려고 하니 분명히 함수를 호출하고 나면 결과를 받아오고 나서 다음 줄의 코드를 순차적으로 실행해야하는데 순차적으로 동작하지 않는 것이다. 이 과정에서 벽을 느꼈다.... 그래서 먼저 동기/비동기 방식이 어떠한 메커니즘으로 웹 브라우저에서 작동하는지 살펴보겠다. 먼저 자바스크립트가 어떻게 동작하는지 큰 그림부터 알아보자 왼쪽은 크롬 브라우저에서 오른쪽은 Node.js 에서 자바스크립트가 작동하는 방식이다. 크롬 브라우저에서는 Web API를 통해 작동하고 Node.js에서는 libuv라는 C기반 라이브러리를 통해 동작을 한다. 이 부분부터가 어려운데 쉽게 생각하면 Node.js 이벤트 주도, 논 블로킹 방식을 지원하고 싱글 스..
설계도 오른쪽 회전의 알고리즘 루트 노드 n에서 불균형이 발견된다면, n.left를 x로 선언하고 n.left를 x.right로 만들어줘 연결을 끊는다. x.right에 n을 연결해줘 서브트리로 갱신한다. 왼쪽 회전은 방향만 바꿔주면 된다. 코드 class Node: def __init__(self, key, height, left=None, right=None): self.key = key self.height = height self.left = left self.right = right class AVL: def __init__(self): self.root = None def height(self, n): if n == None: return 0 return n.height def put(self..
import random maxsize=5 # 큐 사이즈 class que: class customer: # 고객 정보 def __init__(self, ids, arrival_time, service_time): self.id = ids self.arrival_time = arrival_time self.service_time = service_time def __init__(self): self.front = 0 self.rear = 0 self.data=[None]*maxsize def isempty(self): return self.front == self.rear def isfull(self): return self.front == (self.rear+1)%maxsize def enque(sel..
설계도 코드 #include #include #include #define MAX_NAME 20 // name 사이즈 정의 #define MAX_NUMBER 40 // number 사이즈 정의 typedef struct list { // 정보 저장 구조체 char name[MAX_NAME]; //이름 char number[MAX_NUMBER]; //전화번호 }list; typedef struct tree { // 노드 구조체 list key; //정보 저장 구조체 struct tree* left; // 링크 struct tree* right; // 링크 }tree; void insert(tree** root, list data) { // 삽입 함수 tree* p = NULL; //부모 노드 tree* t..
설계도 코드 #include #define MAX 5 // 배열의 범위 정의 typedef struct que { // 구조체 정의 int front; // 큐의 첫 요소의 앞을 가리킴 int rear; // 큐의 마지막 요소를 가리킴 int data[MAX]; // 큐 }que; int is_full(que *fx) { // 큐가 가득 찼는지 검사하는 함수 if ((fx->rear+1)%MAX == fx->front) return 1; // front+1의 값과 rear의 값이 같으면 가득참 else 0; } int is_empty(que* fx) { // 큐가 비어있는지 검사하는 함수 if (fx->front == fx->rear) return 1; // front의 값과 rear의 값이 같으면 비어..
#include #define MAX 100 typedef struct stacktype { // 스택 구조체 정의 char stack[MAX]; int top; }stacktype; void init(stacktype* s) { // 스택 초기화 함수 s->top = -1; } int is_full(stacktype* s) { // 스택 포화 검사 함수 return (s->top == MAX - 1); } int is_empty(stacktype* s) { // 스택 공백 검사 함수 return (s->top == -1); } char pop(stacktype* s) { // 스택 팝 함수 char out; // 입력 받을 변수 out = s->stack[(s->top)--]; // 스택에 상단에 있는..
#include typedef struct NodeList { //노드 리스트 구조체 struct NodeList* link; // 링크: 이전 노드를 가리킴 int data; // 데이터: 데이터를 저장 }Node; int search(Node* head, int a) { //노드 검색 함수 int cnt = 0; // 카운터값 Node* search; // 구조체 포인터 생성 search = head; // search는 첫노드를 가리킴 while (search != NULL) // 머리 노드가 가리키는 링크값이 NULL이 아니면 실행 { if (search->data == a) { // 머리 노드가 가리키는 데이터값이 일치하면 실행 cnt++; // 카운터 증가 } search = search->l..