언어/c언어

queue ver1

파아랑새 2016. 5. 5. 09:32

#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");

}