#include <stdlib.h> #include <stdio.h> #define MIN_QUEUE_SIZE 1 struct Queue_t{ int length; int head,tail; char *array; }; typedef struct Queue_t* Queue; /* * create a empty stack according to the given len * return :the pointer to the stack */ Queue Create_Queue(size_t len) { if(len<MIN_QUEUE_SIZE) { return NULL; } Queue q=(Queue)malloc(sizeof(struct Queue_t)); if(q==NULL) { return NULL; } char *array=(char *)malloc(sizeof(char)*len+1); if(array==NULL) { return NULL; } q->head=0; q->tail=0; q->array=array; q->length=len+1; return q; } /* * delete the given stack */ int Delete_Queue(Queue q) { if(q==NULL) { return -1; } free(q->array); free(q); return 1; } /* * return 0:empty */ int IsEmptyQueue(Queue q) { if(q==NULL) { return -1; } if(q->head==q->tail) { return 0; } return 1; } /* * push a char to stack s */ int Enqueue(Queue q,char c) { if(q==NULL) { return -1; } //tail arrive to the end? if(q->tail==q->length-1) { //array[0] is empty? if(q->head!=0) { q->array[q->tail]=c; q->tail=0; }else{ return -1; } }else{ //head is before tail? if((q->tail+1)==q->head) { return -1; } q->array[q->tail]=c; q->tail++; } return 1; } /* * pop a char from stack s */ char Dequeue(Queue q) { if(IsEmptyQueue(q)<1) { return -1; } char temp = q->array[q->head]; //is head to the end? if(q->head==q->length-1) { q->head=0; }else{ q->head++; } return temp; } /* * get a char from stack s */ char GetQueueHead(Queue q) { if(IsEmptyQueue(q)<1) { return -1; } return q->array[q->head]; }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter