Circular Queue-(Quize 1)

채재헌·2022년 7월 19일
0

🎈1. 문제 설명

- 다음을 만족하는 프로그램을 만드시오!! (Ver2 숫자[int])

🎆2. 코드+ 주석

-Visual Stdio 버전

#include<stdio.h>
#include <stdlib.h>
#define Max 4
typedef struct q {
	int front, rear;				//front rear 변수
	int data[Max];					// data 배열
}MyQueue;

void init(MyQueue* s, int num) {		//큐 초기화
	s = (MyQueue*)malloc(num * sizeof(MyQueue)); /*num 만큼 큐 동적할당*/
	s->front = -1;
	s->rear = -1;
}

int is_full(MyQueue* s)					/*큐가 가득 차면*/
{
	if (s->rear == Max - 1)
		return 1;
	else
		return 0;
}

int is_empty(MyQueue* s)	/*큐가 비웠있으면*/
{
	if (s->front == s->rear)
		return 1;
	else
		return 0;
}

void enqueue(MyQueue* s, int item)	/*숫자를 입력받으면서  rear도 증가 */
{
	if (is_full(s)) {
		printf("equeue 에러\n");
	}
	else {
		s->data[++(s->rear)] = item;	/*item을 데이터 배열에 저장, 인덱스 rear 값 1증가*/
	}
}

int dequeue(MyQueue* s)		/*숫자를 출력하면서 해당 인덱스의 수를 삭제  front 수 증가*/
{
	if (is_empty(s))
	{
		printf("dequeue 에러\n");
	}
	int item;
	item = s->data[++(s->front)];	/*int  형이기 때문에 int 형 값으로 리턴 */
	return item;
}

int main() {
	MyQueue* s = (MyQueue*)malloc(sizeof(MyQueue));
	init(s, 3);

	enqueue(s, 100);
	enqueue(s, 200);
	enqueue(s, 300);
	enqueue(s, 400);

	while (!is_empty(s))
	{
		printf("%d\n", dequeue(s));
	}

	dequeue(s);
	free(s);
	return 0;
}












-Linux 버전


🎇3. 실행 결과

-Visual Studio 버전

=>비주얼 스튜디오에서는

예외가 throw됨: 쓰기 액세스 위반입니다.
s이(가) 0x3935C5B2였습니다. 되었다고 뜨지만 컴파일 에러는 나타자지 않는다.
코드를 리눅스 버전에서 짜고 비주얼 스튜디오에서 실행해보니 출력화면이 제대로 나오지 않는 경우가 발생함 ㅠㅠ
(하지만 이것도 디버그를 해서 문제를 제대로 해결해야 된다.)


-Linux 버전

=>linux 버전에는 정상적으로 작동됨 !!!

✨4. 느낌점

이번 수업 시간에는 큐에 대한 퀴즈를 풀어보았다. 이번 퀴즈의 문제는 큐에 주어진 숫자나 문자열을 넣어 enqueue를 해주고 Queue의 크기에서 초과를 하게 되면 enqueue 에러 라는 출력문을 출력하고 그뒤 dequeue를 하여 dequeue한 값들을 출력하는 출력문을 보이고 더 이상 dequeue 할게 없고 큐가 빈다면 dequeue 에러 라는 출력문을 만드는것이었다.처음 이 문제를 보고 원래 사용하였던 큐 ADT들을 이용하여 쉽게 구하면 된다고 생각하였고, main 함수에 맞게 큐 ADT에서 조금만 수정하면 원하는 출력문을 구할 수 있을것이라고 생각하였다. 하지만 코드를 완성한 후 dequeue가 되지 않는다는 것을 깨닫고 다시 dequeue의 리턴값을 수정하여 dequeue의 값을 제대로 출력하도록 하였다. 나는 이번 퀴즈를 통해 내가 리턴값을 제대로 리턴하는것에 아직 미숙하다고 생각하였고, 주어진 8점문제와 10점 문제중 10점 문제(문자열 출력)를 풀지 못한 것을 통해 fgets 함수를 제대로 이해하고 있는 것 같지 않다고 생각하였다. 그러므로 이번시간을 계기로 다시 한번 리턴 값을 리턴하는 원리를 다시 복습하고 코딩사이트의 큐 문제로 C언어의 미숙한 부분과 자료구조의 개념을 한번 더 다지고 비주얼 스튜디오와 리눅스에서 실행화면이 다른게 나온 이유를 알아내고 다시 한번 풀어봐야겠다는 생각이 들었다.

0개의 댓글