본문 바로가기

반응형

Programming/Data Structure

(25)
[C언어] 원형연결리스트(큐) 은행창구 시뮬레이션 시뮬레이션이란? - 실제로 일을 실행하기에 앞서서 프로그램으로 미리 실험하는 것이다. - 주어진 문제를 수학적으로 모델링하는 데에서 시작한다. - 고객의 평균 도착시간은? - 고객은 보통 몇 분에 한 명씩 은행에 도착하는가? - 한 고객당 처리 시간은 몇 분 정도 걸리는가? 시간중심(time-driven) 시뮬레이션 시뮬레이션 시계에 일정 단위 시간(tick)을 계속적으로 증가시키면서 매번 해당 시간에 일어나는 일이 있는지를 검사하면서 시뮬레이션한다. 사건중심(event-driven) 시뮬레이션 시물레이션의 대상이 되는 사건이 발생할 때마다 경과된 시간을 증가시키고 상태 변수들을 갱신하면서 시뮬레이션한다. 예) 은행 창구 시뮬레이션 - 고객의 도착, 서비스 시작, 서비스 종료의 3가지 사건(이벤트) 고객..
[C언어] 이중원형연결리스트 이중연결리스트 - 이중연결리스트는 각 노드가 앞 노드를 가리킬 수 있도록 한다. - 단순 연결리스트의 각 노드에 두 개의 노드 포인터를 두어서 하나를 앞쪽 노드, 하나는 뒤쪽 노드를 가리키도록 한다. - 어느 방향으로나 탐색이 가능한 형태다. 이중원형연결리스트 - 이중 연결리스트와 원형 연결리스트의 개념을 합한 것이다. - 왼쪽 끝 노드의 L.Link는 오른쪽 끝 노드를, 오른쪽 끝 노드의 R.Link는 왼쪽 끝 노드를 가리킨다. 헤드노드를 가진 이중원형연결리스트 - 이중 원형 연결리스트는 연산이 매우 복잡하기 때문에, 연산 알고리즘을 간단하게 하기 위해서 헤드 노드를 가진다. - 헤드 노드는 다른 노드와 형태가 같지만, 데이터 값을 가지지는 않는다. 이중원형연결리스트의 삽입 1. temp는 삽입할 노드..
원형연결리스트 단순연결리스트의 단점 - 첫번째 노드는 바로 찾아갈 수 있지만, 마지막 노드는 리스트를 따라가야 한다. - 마지막 데이터를 찾을 경우, 마지막 데이터 다음에 삽입할 때 불편하다. 원형연결리스트의 정의 - 리스트의 마지막 노드의 링크가 첫 번째 노드를 가리키도록 연결한다. - 리스트 포인터가 마지막 노드를 가리키도록 하면, 리스트의 처음 노드도 쉽게 탐색이 가능하다. 원형연결리스트의 삽입 1. 삽입할 노드를 임시 포인터 temp로 가리킨다. 2. 삽입할 노드의 포인터가 처음 노드를 가리킨다. 3. Rear가 가리키고 있는 노드의 포인터가 삽입할 노드를 가리킨다. 4. Rear가 삽입할 노드를 가리킨다. 원형연결리스트의 삭제 1. 임시 포인터 temp가 Rear->Next 노드를 가리킨다. 2. Rear->..
[C언어] 스택의 응용 (후위표현식) 후위표현식의 계산 $(A+B)*C$ $\to$ $AB+C*$ - 괄호를 사용하지 않고 왼편에서 오른편으로 수식을 읽으면서 바로 계산한다. - 연산자 우선순위를 고려할 필요가 없어 컴파일러는 중위표현식을 후위표현식으로 변환 후 계산한다. 후위표현식에서의 스택 사용 1. 피연산자가 들어오면 스택에 푸시한다. 2. 연산자가 들어오면 스택에 쌓인 피연산자 두 개를 꺼내 해당 연산을 실행한다. - 그러나 먼저 팝된 피연산자가 연산자의 오른쪽으로 놓고 연산을 실행한다. 3. 그 결과를 다시 스택에 푸시한다. 4. 마지막에는 스택에 최종 계산 결과만 남게 된다. 스택 구조체 선언 #include #define MaxStackSize 10 typedef struct { int Top; double data[MaxSta..
[C언어] 스택 연결리스트 자료구조 구현하기 노드 구조체 구현 #define MaxStackSize 100 typedef struct node { char data; struct node* next; }nodeType; nodeType* stack_top; - 데이터와 링크(넥스트)를 묶어서 구조체를 선언한다. - 노드를 가리키는 처음 stack_top 포인터 선언 스택 초기화 함수 void init() { stack_top = NULL; } 스택 빈 여부 확인 함수 int isEmpty() { if (stack_top == NULL) { return 1; } else return 0; } - stack_top이 여전히 NULL이라면 옳기 때문에 1을 반환 - 그렇지 않다면 0 false를 반환 스택 사이즈 가져오기 int getSize() { n..
[C언어] 연결리스트(링크드리스트) 자료구조 구현 포인터 개념 확립하기 #include void add(int *a) { *a = *a + 10; } void main(void) { int a = 0; add(&a); printf("답은 %d 이다.", a); }; #include #include void change_value(int *p, int *q) { *p = 5; *q = 10; printf("%d %d\n", * p, *q); } void main(void) { int* a; int* b; a = malloc(sizeof(int)); b = malloc(sizeof(int)); *a = 3; *b = 7; printf("%d %d\n", *a, *b); change_value(a, b); }; 3 7 5 10 Swap함수 #include #..
[리눅스][C언어] 구조체 구현 구조체 데이터타입은 레고블럭과 같은 개념이다. 그런데 이러한 데이터타입을 조합해서 새로운 타입을 만들어낼 수 있는데, struct 구조체다. 다양한 데이터타입을 가지고 이러한 새로운 레고블럭을 만들 수 있다는 개념으로 이해하면 된다. #include #include // printf에서 string 포맷을 사용 struct student{ int s_id; char name[20]; }; int main(){ struct student st1; // 구조체 선언 st1.s_id = 10; strcpy(st1.name, "Lazy Dev"); printf("s_id : %d\n",st1.s_id); printf("name : %s\n",st1.name); return 1; } root@DESKTOP-O5C..
[리눅스][C언어] 배열 포인터 배열은 붙어있다. 변수는 붙어있는 것이 보장되지 않는다. #include int main(){ int arryA[10]; for(int i=0; i

반응형