#include<stdio.h>
#define MAX_STACK_SIZE 100
int stack[MAX_STACK_SIZE];
int top=-1;
int IsEmpty(){
if(top<0)
return true;
else
return false;
}
int IsFull(){
if(top>=MAX_STACK_SIZE-1)
return true;
else
return false;
}
void push(int value){
if(IsFull()==true)
printf("스택이 가득 찼습니다.");
else
stack[++top]=value;
}
int pop(){
if(IsEmpty()==true)
printf("스택이 비었습니다.");
else
return stack[top--];
}
int main(){
push(3);
push(5);
push(12);
printf("%d ",pop());
printf("%d ",pop());
printf("%d ",pop());
return 0;
}
#include <stdio.h>
#define MAX 100
int front=-1;
int rear=-1;
int queue[MAX];
int IsEmpty(void){
if(front==rear)//front와 rear가 같으면 큐는 비어있는 상태
return true;
else return false;
}
int IsFull(void){
int tmp=(rear+1)%MAX; //원형 큐에서 rear+1을 MAX로 나눈 나머지값이
if(tmp==front)//front와 같으면 큐는 가득차 있는 상태
return true;
else
return false;
}
void addq(int value){
if(IsFull())
printf("Queue is Full.\n");
else{
rear = (rear+1)%MAX;
queue[rear]=value;
}
}
int deleteq(){
if(IsEmpty())
printf("Queue is Empty.\n");
else{
front = (front+1)%MAX;
return queue[front];
}
}
int main(){
addq(4);
addq(7);
addq(12);
printf("%d\n",deleteq());
printf("%d\n",deleteq());
printf("%d\n",deleteq());
deleteq();
return 0;
}
스택과 큐를 C언어로 표현한 것이다.
큐 부분에서 1을 더해서 max값으로 나눈 값을 왜 대입하는지 즉 왜
rear =rearr +1 이 아니라 rear = rear +1 % Max인지 몰랐는데 실제 큐는 전자의 경우가 맞지만 이건 원형큐를 구현한 거라고 한다. 즉 배열의 범위를 넘어가게 되면 다시 처음부터 돌아가게 만들게 구현한거라고 한다.
728x90
'초기 네이버 기록 > 과거 공부 기록' 카테고리의 다른 글
이코테 구현알고리즘 예제 2번 시각 완전탐색 (C언어) (0) | 2023.01.08 |
---|---|
합병정렬 (0) | 2023.01.08 |
도서관리 프로그램 구조체 활용버전 씹어먹는 C언어 (2) | 2023.01.07 |
도서관리 프로그램 최종본 (씹어먹는 C) (0) | 2023.01.07 |
공부기록 문자열 (씹어먹는 C언어)(scanf함수에서 띄어쓰기 해결 ,화면 출력함수 변환문자 제어문자) (0) | 2023.01.07 |