queue ver1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct queue {
int* dataArray;
int ArraySize;
int front;
int rear;
int dataCnt;// 데이터의 갯수 check !!!
}queue;
void queueInitiallize(queue** ppointer_queue);
void enqueue(queue** ppointer_queue);
void dequeue(queue** ppointer_queue);
int isFULL(queue** ppointer_queue);
int isEMPTY(queue** ppointer_queue);
void dataPrintf(queue** ppointer_queue);
int main(void) {
queue* queue_str = NULL;
queueInitiallize(&queue_str);
enqueue(&queue_str);
enqueue(&queue_str);
enqueue(&queue_str);
enqueue(&queue_str);
enqueue(&queue_str);
dataPrintf(&queue_str);
dequeue(&queue_str);
dataPrintf(&queue_str);
return 0;
}
void queueInitiallize(queue** ppointer_queue) {
int index;
printf("Please size input : ");
(*ppointer_queue) = (queue*)malloc(sizeof(queue));
scanf_s("%d", &((*ppointer_queue)->ArraySize));
(*ppointer_queue)->dataArray = (int*)malloc(sizeof(int)*(** ppointer_queue).ArraySize);
for (index = 0; index < (** ppointer_queue).ArraySize; index++) {
*((*ppointer_queue)->dataArray + index) = 0;
}
//echo printf
for (index = 0; index < (** ppointer_queue).ArraySize; index++) {
printf("%d ", *((*ppointer_queue)->dataArray + index));
}printf("\n");
(**ppointer_queue).front = -1;
(**ppointer_queue).rear = -1;
(**ppointer_queue).dataCnt = 0;
}
void enqueue(queue** ppointer_queue) {
if (isFULL(ppointer_queue)) {
printf("data is full!! \n");
return;//END
}
else {// __not full__
printf("data is not full !! \n");
printf("Please [%d] data Insert!! : ", (** ppointer_queue).dataCnt+1);
if ((** ppointer_queue).dataCnt == 0) {
(** ppointer_queue).front += 1;
(** ppointer_queue).rear += 1;
(** ppointer_queue).dataCnt += 1;
scanf_s("%d", &((** ppointer_queue).dataArray[(** ppointer_queue).rear]));
} else { //(** ppointer_queue).dataCnt > 1
(** ppointer_queue).rear += 1;
(** ppointer_queue).dataCnt += 1;
scanf_s("%d", &((** ppointer_queue).dataArray[(** ppointer_queue).rear]));
}
}
}
int isFULL(queue** ppointer_queue) {
if ((**ppointer_queue).dataCnt == (**ppointer_queue).ArraySize) {
return 1; // _Full_
}
else {//(**ppointer_queue).ArraySize - 1 != (**ppointer_queue).rear
return 0; // _Not Full_
}
}
int isEMPTY(queue** ppointer_queue) {
if ((**ppointer_queue).dataCnt == 0) {
return 1; // _EMPTY_
}
else {// (**ppointer_queue).dataCnt >= 1
return 0; // _Not Empty_
}
}
void dequeue(queue** ppointer_queue) {
int i;
if (isEMPTY(ppointer_queue)) {
printf("삭제할 데이터가 없습니다. \n");
}
else {
for (i = 0; i < (** ppointer_queue).dataCnt - 1; i++) {
(** ppointer_queue).dataArray[i] = (** ppointer_queue).dataArray[i + 1];
}
(** ppointer_queue).rear -= 1;
(** ppointer_queue).dataCnt -= 1;
}
}
void dataPrintf(queue** ppointer_queue) {
int i;
for (i = 0; i < (** ppointer_queue).dataCnt; i++) {
printf("%d ", (** ppointer_queue).dataArray[i]);
}printf("\n");
}