컴공 일기111
게시글 주소: https://orbi.kr/00057459044
오늘 구현한 것은, 순환 큐라는 자료구조입니다. 스택과는 다르게 양방향이 뚫려있는 구조지요 :) 복잡한 것 같지만, 원리는 간단합니다.
-CircularQueue.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
typedef struct tagNode
{
int Data;
}Node;
typedef struct tagCircularQueue
{
int Capacity;
int Front;
int Rear;
Node* Nodes;
}CircularQueue;
void CQ_CreateQueue( CircularQueue** Queue, int Capacity);
void CQ_DestroyQueue( CircularQueue* Queue);
void CQ_Enqueue( CircularQueue* Queue, int Data);
int CQ_Dequeue( CircularQueue* Queue);
int CQ_GetSize( CircularQueue* Queue);
int CQ_IsEmpty( CircularQueue* Queue);
int CQ_IsFull(CircularQueue* Queue);
-CircularQueue.c
#include "CircularQueue.h"
void CQ_CreateQueue(CircularQueue** Queue, int Capacity)
{
(*Queue) = (CircularQueue*)malloc(sizeof(CircularQueue));
(*Queue)->Nodes = (Node*)malloc(sizeof(Node) * (Capacity+1));
(*Queue)->Capacity = Capacity;
(*Queue)->Front = 0;
(*Queue)->Rear = 0;
}
void CQ_DestroyQueue(CircularQueue* Queue)
{
free(Queue->Nodes);
free(Queue);
}
void CQ_Enqueue(CircularQueue* Queue, int Data)
{
int Position = 0;
if (Queue->Rear == Queue->Capacity)
{
Position = Queue->Rear;
Queue->Rear = 0;
}
else
Position = Queue->Rear++;
Queue->Nodes[Position].Data = Data;
}
int CQ_Dequeue(CircularQueue* Queue)
{
int Position = Queue->Front;
if (Queue->Front == Queue->Capacity)
{
Queue->Front = 0;
}
else
Queue->Front++;
return Queue->Nodes[Position].Data;
}
int CQ_GetSize(CircularQueue* Queue)
{
if (Queue->Front <= Queue->Rear)
return Queue->Rear - Queue->Front;
else
return Queue->Rear + (Queue->Capacity - Queue->Front) + 1;
}
int CQ_IsEmpty(CircularQueue* Queue)
{
return (Queue->Front == Queue->Rear);
}
int CQ_IsFull(CircularQueue* Queue)
{
if (Queue->Front < Queue->Rear)
return (Queue->Rear - Queue->Front) == Queue->Capacity;
else
return (Queue->Rear + 1) == Queue->Front;
}
-main.c
#include "CircularQueue.h"
int main(void)
{
int i;
CircularQueue* Queue;
CQ_CreateQueue(&Queue, 10);
CQ_Enqueue(Queue, 1);
CQ_Enqueue(Queue, 2);
CQ_Enqueue(Queue, 3);
CQ_Enqueue(Queue, 4);
for (i = 0; i < 3; i++)
{
printf("Dequeue : %d, ", CQ_Dequeue(Queue));
printf("Front : %d, Rear : %d\n", Queue->Front, Queue->Rear);
}
i = 100;
while (CQ_IsFull(Queue) == 0)
{
CQ_Enqueue(Queue, i++);
}
printf("Capacity: %d, Size: %d\n\n", Queue->Capacity, CQ_GetSize(Queue));
while (CQ_IsEmpty(Queue) == 0)
{
printf("Dequeue: %d, ", CQ_Dequeue(Queue));
printf("Front : %d, Rear : %d\n", Queue->Front, Queue->Rear);
}
CQ_DestroyQueue(Queue);
return 0;
}
[실행결과]
Dequeue : 1, Front : 1, Rear : 4
Dequeue : 2, Front : 2, Rear : 4
Dequeue : 3, Front : 3, Rear : 4
Capacity: 10, Size: 10
Dequeue: 4, Front : 4, Rear : 2
Dequeue: 100, Front : 5, Rear : 2
Dequeue: 101, Front : 6, Rear : 2
Dequeue: 102, Front : 7, Rear : 2
Dequeue: 103, Front : 8, Rear : 2
Dequeue: 104, Front : 9, Rear : 2
Dequeue: 105, Front : 10, Rear : 2
Dequeue: 106, Front : 0, Rear : 2
Dequeue: 107, Front : 1, Rear : 2
Dequeue: 108, Front : 2, Rear : 2
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
캬
-
반려견.. 키워 봐야 아는듯 어줍잖게 말고 본인이 직접 데려오는 동물에 대한 인식도 같이 바뀌는듯
-
우리집 가난햇어서 유딩쯤 나이때 이거사줘<< 한번도 해본적없음 안되는걸 알기에 애들...
-
물마심 > 오줌쌈 > 마심 > 오줌쌈 > 마심 무한동력이 아니라 무현동력임
-
물리치료랑 간호조무사 쪽이었음 의대 지망이 다 화학 동아리로 가는 이유가 있었구나
-
어케 해야할까요... 실모 풀때마다 실수가 계속나와서 스트레스네요
-
물리학과 + 의학과 복수전공해야됨 ㄷㄷㄷ
-
5덮 결과 0
화작: 90 ( 23, 27, 32, 34) 독서론은 1번이 너무 이상한 답이어서...
-
점수맞히면 5000덕 13
힌트1 고2 20년 6월 수학 힌트 2 컨디션 저조하고 머리아픔 힌트 3 고2 3모...
-
확통 기출 2회독 거의 다 끝나가는데 교사경 vs N제 추천 좀 1
확통은 교사경이 나아요 아님 N제가 나아요? 2개다는 못 풀 듯 수완풀고 수완...
-
작년엔 이맘때였는데 정확한 날짜아시는분 계실까요?
-
사실 트렌드라 하긴 좀 뭐한데 암튼 그런게 체육이랑 심리학, 물리치료랑 재활치료...
-
원래 디자인 관심 없는데 이건 지리누 ㄷㄷ
-
우리집 수원이랑 한시간 - 한시간반 거린데 얼마나 쳐 놀앗으면…
-
블러드파운틴 0
-
센츄되네 11
이왜센 ㅋ
-
반수공부 ㅜㅜ 1
22333 화미물지였고 6모 응시 신청해놨고 물지->생윤사문 사탐런이고 작수끝나고...
-
풀어보죠. 9월은 수열 무서웡
-
왜 6시간 남음?ㅠ
-
돈을 못벌겠네
-
3,7,29
-
지하철 두 정거장 지나침ㅋㅋ 다시 빽해야지
-
근데 아싸라 축제를못감..
-
님들은 다이어리 왜 쓰시나요
-
어렸을때 천식 있었는데 감기도 약간 천식성 기침하고 그랬는데 수업 시간에 기침이...
-
ㄴㅇㅅ~~
-
6모 대비 실모 0
임정환t랑 이명학t는 대비 실모 안 나오나요? 일주일전부터 시뮬 돌리면서...
-
엉엉
-
도대체 어디서 보는거임? 열렸다는데 아무리 찾아도 어디서 보는지 ㅁㄹ겟음 설마 하루...
-
소득 상위구간들이나 누적 재산 많은 구간에다가 국내 소비 의무화 법안을 추진하는거임...
-
심찬우 현강 1
지금 현재 언매 5등급이고 심찬우 현강 듣는 현역 학생입니다.. 지금 인강이랑 현강...
-
언어와 매체 질문인데 4번이 왜 답인건가요? ㅓ는 ㅣ 모음이 아닌건가요? ㅣ 모음의...
-
후기 남김ㄱㄷ
-
수험생커뮤니티에 3
중독된 나
-
다니시는 분들 분위기 괜찮나요? 6평 이후에 가볼까 생각중인데 추천하시나여
-
부자보단 카푸어 느낌이 강해져서 그런지 강남엔 포르쉐가 더 많이 보이는듯
-
오늘의 실모 0
이감 3-1 언매 91 킬캠 2회 88(15,28찍맞) 더데유데 2회 80...
-
아니면 그냥 시간되면 바로 눌러도 되나요
-
낙곱새같은 맛인가용
-
건동홍은 좀 림들거같은데
-
너무 모르는 질문을 하는듯ㅡㅡ 그런가요???
-
교생쌤이 내번호따간후 오마카세 사줌 늦은 시간대라 교생쌤집에서 잠 쌤한테 나한테 왜...
-
1학기는 학점 채워서 들었고 2학기는 6학점(최소학점)만 듣고 반수 도전하고 싶은데...
-
어떻게생각하심?
-
사문 정답률 70%이하 문제들(개쳐쉬운 건 아닌데 어렵진 않은 문제들) 푸는 데...
-
출근 완 22
존나덥네시발
-
응깃 퇴근 4
좀만 자고 귱부해야지
-
영어 3초 생명 2후 수1 2후 윤사 3초가 떠버렸는데 다 100점 맞고 운좋으면...

오늘도 열심히 달리시는군요!많이 덥지만 파이팅이에요 컴공주님
보라새님도 화이팅이에요! 더우니까 저녁엔 꼭 아아나 아이스티 옆에 두고 공부하기!