프로그래밍[Univ]/데이터구조 36

[덱] 디큐/덱 구조 6/8

* 덱(Deque) ⓐ 특징 - 두 개의 끝을 가지는 큐 - Double Ended Queue의 약자 - 구조의 앞과 뒤에서 모두 추가/삭제가 가능한 구조 - 큐와 스택의 기능을 합친 자료구조 ⓑ 변수 - 맨 앞을 가르키는 front - 맨 뒤를 가르키는 rear ⓒ 함수 - makeDeque() : 덱 생성 - insertFront() : 맨 앞에 자료 추가 - insertRear() : 맨 뒤에 자료 추가 - deleteFront() : 맨 앞의 자료 삭제 - deleteRear() : 맨 뒤의 자료 삭제 ⓓ 구현 - 배열 이용 / 특이 사항 없음 - 리스트 이용 > 단일 링크드리스트를 사용하면 자료의 맨끝(rear)에 자료를 삭제 할시 문제가 발생한다. > 이중 링크드리스트 사용을 추천한다. ---..

[큐] 연결리스트로 구현한 큐 6/8

#include #include #include typedef struct nodetype{ int data; struct nodetype *next; }node; typedef struct Quetype{ int count; node * rear; node * front; }Que; //자료형태 구조체 및 Que구조체 생성 //배열 큐와의 차이점 : ⓐ최대 저장개수가 불필요 / ⓑ rear/front가 포인터로써 쓰임 Que *makeQue(){ Que *returnQue; returnQue = (Que *)malloc(sizeof(Que)); if ( returnQue != NULL ){ returnQue -> count = 0; // 현재저장된 개수 초기화 returnQue -> rear = NUL..

[큐] 배열 큐 6/7

#include #include #include typedef struct nodetype{ int data; }node; typedef struct Quetype{ int max; int count; int rear; int front; node *ArrayQue; }Que; //자료형태 구조체 및 Que구조체 생성 Que *makeQue(int max){ Que *returnQue; returnQue = (Que *)malloc(sizeof(Que)); if ( returnQue != NULL ){ returnQue -> max = max; // 최대값 지정 returnQue -> count = 0; // 현재값 지정 returnQue -> rear = -1; // 현재 꼬리 위치지정 returnQu..

[큐] 큐 Queue 6/7

1. 큐 ⓐ 특징 - FIFO(First In First Out)의 선입선출 - 저장된 순서에 의해 데이트거 나오는 자료 구조 - 선형 자료구조 ⓑ Stack vs Queue Stack과 Queue에서의 차이는 자료의 추가, 삭제 및 반환에서 나타난다. 일단 구조상 스택은 LIFO인 반면 큐는 FIFO를 가진다. 이에 따라 자료 추가/삭제시 다음과 같은 차이를 보인다. Stack : 제일 위인 Top에서만 자료의 추가, 삭제 및 반환 가능 Queue : 추가 → 제일 뒤의 rear에서만 가능 / 삭제 및 반환 → 큐의 제일 앞인 front에서만 가능 ⓒ 주요 기능 makeQue() : 큐 생성 enQue() : 자료 추가 deQue() : 자료 삭제 peek() : 큐의 맨 앞 원소 반환 // Queue..

[스택] 응용 2 : 중위표기를 후위표기 전환

자자... 이번엔 스택을 이용하여 계산기를 만들어 보겠습니다~ 무려 사칙연산과 ( ) 1+1)를 후위표기법(ex>11+)로 전환해야 합니다. 그 후에 계산을 하지요~ 자일단 후위표기에대해서 한번 알아봅시다. 1) 중위 표기 : 연산을 중간에 써준다 ex) a+b 2) 후위 표기 : 연산을 맨뒤에 써준다 ex )ab+ >>장점 : 괄호가 사라진다. ex ) 중위표시 : (2+3)*3-1 후위표시 : 23+3*1- 후위표시는 각각의 숫자를 push하여 스텍에 쌓은뒤 연산자가 나오면 숫자들을 pop하면서 연산을 실행해준다. 연산한 결과를 return하여 스택에 쌓고 다음 숫자를 받아들여 스텍에 쌓은 뒤 연산자가 나호면 숫자들을 pop하여 연산을 실행한다. 이를 반복하여 값을 구한다. ※스택을 이용하여 치리하는..

[스택] 응용 1 : 문자 역순 출력프로그램

#include #include #include typedef struct nodetype{ char data; struct nodetype *next_ptr; }node; typedef struct stacktype{ int count; node *head_ptr; }stack; stack *makestack(){ stack *returnstack; returnstack = (stack *)malloc(sizeof(stack)); if( returnstack != NULL ){ memset(returnstack,0,sizeof(stack)); return returnstack; }else{ printf("Error!! Memory\n"); return 0; } return 0; } void Push(s..

[스택] 링크드리스트를 이용한 stack 5/27

#include #include #include typedef struct nodetype{ // 노드의 형식 int data; struct nodetype *next_ptr; }node; typedef struct stacktype{ // 리스트 스택의 형식 int count; node *head_ptr; }stack; stack *makestack(){ // 스택을 만듭니다. stack *returnstack; // 반환한 스택을 생성후 returnstack = (stack *)malloc(sizeof(stack)); // 메모리할당을 한후 if( returnstack != NULL ){ // 검사를 해줍니다. memset(returnstack,0,sizeof(stack)); // 초기화를 한후에 r..

[스택] 배열을 이용한 스택 구현 5/27

#include #include #include typedef struct nodetype{ // 자료 묶음 int data; }node; typedef struct Astack_type{ // stack의 형식 int max; int count; node *data_ptr; }stack; stack *makestack(int max){ // stack을 생성하는 함수입니다. stack *returnstack; // 반환한 스택을 만든후 returnstack = (stack *)malloc(sizeof(stack)); // 메모리 할당을 한후 if( returnstack != NULL ){ // 동적 할당이 잘되었는지 확인 후 returnstack -> count = 0; // 반환할 스택에 들어가야할 ..

[스택] 스택(stack) 5/26

~프로로그~ 스택의 기본적인 성질에 대해서 알아보자~ --------------------------------------- *Stack(스택) - 특징 ⓐ 선형 자료구조 > 전후관계가 모두 1:1 ⓑ LIFO(Last In First Out) "후입 선출" = FILO(First In Last Out) "선입 후출" >> " 가장 나중에 들어간 자료가 가정 먼저 나온다!!" ⓒ 자료의 추가, 삭제(반환)은 스택의 끝에서만 가능 - 개념 ⓐ Push : 스택에 자료를 저장 하는 것 >스택의 크기를 벗어나면 Overflow(넘침)가 발생한다.(메모리상 다른 곳을 건드려 다른프로그램에 영향을 끼침) ⓑ Pop : 스택에서 자료를 봔환 및 삭제 하는 것 >공백상태의 스택을 Pop하면 underflow(부족)가..

[리스트]이중연결리스트 (더블링크리스트) 5/25

#include #include #include typedef struct nodetype{ // 노드하나의 형식을 정의 해줍니다. int data; struct nodetype *pre_node; // 자신 이전을 가르키는 노드 입니다. struct nodetype *next_node; // 자신 다음을 가르키는 노드 입니다. }node; typedef struct listtype{ int count; // 저장된 자료 개수 입니다. node headnode; // 더미노드(해더노드)입니다. }list; list *makelist(){ // 리스트를 만드는 함수입니다. list *returnlist; // 생성할 리스트 입니다. 반환 값 returnlist = (list *)malloc(sizeof(l..