저희(사람)이 사용하는 수식은 중위표기법인데요. 하지만 컴퓨터가 수식을 계산할 때에는 후위표기식으로 바꾸어서 계산합니다. 예를 들어 8/2-3+3*2을 계산한다고 하면 컴퓨터는 82/3-32*+로 바꾸어서 계산해요.(수식에 사용되는 숫자는 한자리라고 가정) 중위 수식을->후위 수식으로 바꾸는게 후위표기식을 계산하는 것보다 어렵기에.. 먼저 후위표기식을 계산하는 것부터 시작할게요. 알고리즘은 다음과 같아요. *문자열을 읽는다고 가정-숫자라면 스택에 집어넣습니다.-연산자가 나오면 스택에서 숫자를 2개 꺼내서 연산후에 다시 스택에 집어넣습니다.-문자열이 끝났다면 스택에 남아있는 값이 결과값. 다음의 stack.h/stack.c를 사용했습니다. 1234567891011121314151617181920212223..
singleLinkedList.h123456789101112131415161718#ifndef SINGLELINKEDLIST_H#define SINGLELINKEDLIST_H typedef int element;typedef struct ListNode { element data; struct ListNode *link;}Node; Node* create_node(element data, Node* link);void insert_node(Node** phead, Node* p, Node* newNode);void remove_node(Node** phead, Node* p, Node* removed);void display(Node* head);void display_recur(Node* head);N..
스택에 이어 큐 포스팅입니다. 스택같은 경우에는 먼저들어간 노드가 가장 마지막에 나왔다면(후입선출) 큐같은 경우는 먼저 들어간 노드가 가장 먼저 나옵니다(선입선출).밑에는 동적할당으로 구현한 큐입니다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#include #include typedef int element;typedef struct node { element data; struct node* link;}Node;//노드 구조체 typedef struct queue { Node* head; Node* tail;}Queue;//head..
이번에는 스택의 활용에 대해 알아볼게요! 저번에 제가 구현한 스택(리스트)을 이용해서 해볼게요. 바뀐 것은 스택에 저장하는 데이터 타입(int->char)로 바뀐것 밖에 없어요. 밑에는 괄호검사 코드입니다. (http://tiger1710.tistory.com/3) 참고하시면 좋을 것 같아요 1:brackets함수는 문자열과 스택을 이용해서 괄호 검사를 합니다! 2:최대는 문자열의 길이만큼 검사를 해야 합니다. 최소는 중간에 끝나겠죠? 3~5:문자열에 있는 괄호가 여는 괄호 ( 또는 { 또는 [ 이면 스택에 집어넣습니다! 6~33:까지는 문자열에 있는 괄호가 닫는 괄호 ) 또는 } 또는 ] 이면 하는 코드에요. 7~31:스택이 비어있지 않다면 닫는 괄호와 쌍이 맞는 괄호를 확인하고 스택에서 꺼내는 코드에..
자료 구조의 한 형태인 '스택'을 코드로 구현해 봤습니다. (배열로) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include #include #define MAX 100 typedef struct stack { int s[MAX]; int top;}Stack; void init(Stack *p) { p->top = -1;} void push(Stack *p,int data) { p->top++; p->s[p->top] = data;} bool isFull(Stack *p) { if (p->top == MAX-1) return true; else return false;} bool i..