Code:#include <stdio.h> #include <stdlib.h> #define limit 100000 /*Queue*/ typedef char queueElements; typedef struct { queueElements *contents; int front; int rear; int size; int n; } queueT; int queueInit(queueT *queueP, int n); void enqueue (queueT *Q, int element); int queueIsfull (queueT *Q); int dequeue (queueT *Q); int queueIsempty (queueT *Q); void queuemove (queueT *Q); void queueprint (queueT *Q); void queueDestroy (queueT *Q); int queue(queueT *a); int main () { queueT *a2; int sel,res,n; do { printf("CHOOSE! \n"); printf("1:Stacks\n"); printf("2:Queue\n"); printf("3:Exit\n"); printf("Choose your destiny.\n\n"); scanf("%d",&sel); switch (sel) { case 1: break; case 2: do { printf("***********************************************************************\n"); printf("How many elements? (Please give a positive integer smaller than 100000)\n"); printf("***********************************************************************\n"); scanf("%d",&n); } while (n>limit || n<=0); res=queueInit(a2,n); if (res) { printf("Error in creating stack!\n"); exit(0); } printf("!!!!\n"); queue(a2); break; case 3: break; } if (sel==3) break; } while (1); system("pause"); return 0; } int queue(queueT *a) { int sel; queueElements element; while (1) { printf("What to do? \n"); printf("1:Enqueue\n"); printf("2:Dequeue\n"); printf("3:Move elements to the beginning\n"); printf("4:Print\n"); printf("5:Destroy and exit.\n"); printf("Choose your destiny.\n\n"); scanf("%d",&sel); printf("\n"); switch (sel) { case 1: if ( queueIsfull(a) ) printf("Error: Queue is full! Dequeue an element in order to enqueue one. \n\n"); else { printf("Enter the value to insert.\n\n"); scanf("%d",&element); enqueue(a,element); } break; case 2: if ( queueIsempty(a) ) printf("Error: Queue is empty! Enqueue an element in order to dequeue one.\n\n"); else { element = dequeue(a); printf("Element removed from queue is %d.\n\n", element); } break; case 3: if ( queueIsfull(a) ) printf("Error: Queue is full! Dequeue an element in order to move the elements of the queue.\n\n"); else if ( queueIsempty(a)) printf("Error: Queue is empty!\n\n"); else queuemove (a); break; case 4: if ( queueIsempty(a) ) printf("Error: Queue is empty! Enqueue an element in order to show the queue.\n\n"); else queueprint(a); break; case 5: queueDestroy(a); return 0; } } } int queueInit(queueT *queueP, int n) { queueElements *newcontents; newcontents=(queueElements*)malloc(sizeof(queueElements)*n); if (newcontents==NULL) // return 1; system("pause"); printf("!!!!\n"); queueP->contents=newcontents; .. printf("!!!!\n"); system("pause"); queueP->front=0; queueP->rear=-1; queueP->size=0; queueP->n=n; return 0; //Function crashes here... } void enqueue (queueT *Q, int element) { Q->rear++; Q->contents[Q->rear]=element; Q->size++; } int queueIsfull (queueT *Q) { if ( Q->size == Q->n) return 1; return 0; } int dequeue (queueT *Q) { int element; element = Q->contents[Q->front]; Q->size--; Q->contents[Q->front]=0; Q->front++; return element; } int queueIsempty (queueT *Q) { if ( Q->front > Q->rear ) return 1; else return 0; } void queuemove (queueT *Q) { int i; if (Q->front>=1) { for (i=0;i<=Q->size;i++) { Q->contents[i]=Q->contents[Q->front]; Q->front++; } Q->front=0; Q->rear=Q->size-1; } else printf("The elements of the queue are already placed in the beginning.\n\n"); } void queueprint (queueT *Q) { int i; for (i=Q->front;i<=Q->rear;i++) printf("%d ",Q->contents[i]); printf("\n"); } void queueDestroy (queueT *Q) { free(Q->contents); }
Howdy! I have a problem. I can't use the queue option because my program crashes after I input a number, well the function "int stackInit" won't end, which indicates the number of elements of the queue. The stacks option however is fine (I removed it because I don't think it's related to the problem). I use DEV C++ to compile this source code.