New to the C language and trying to write a test program for my queue, just wondering what I'm doing wrong. Im not really sure if i'm referencing things correctly.
here are my compiler errors:
gcc -Wall -ansi -pedantic queue.c queue.h test.c
queue.c: In function âdequeueâ:
queue.c:34: warning: passing argument 1 of âemptyâ from incompatible pointer type
queue.c:48: warning: cast from pointer to integer of different size
queue.c: In function âprintArrâ:
queue.c:73: warning: format â%dâ expects type âintâ, but argument 2 has type âint *â
queue.c: In function âfreeArrâ:
queue.c:84: error: expected declaration or statement at end of input
queue.c:84: error: expected declaration or statement at end of input
queue.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
void init ( Queue * qq)
{
qq->cap = 26;
qq->arr = malloc( sizeof(int) * qq->cap);
qq->front = 0;
qq->back = 0;
qq->elements = 0;
}
void enqueue( Queue * qq, int num)
{
if(qq->cap == qq->elements)
{
qq->arr = realloc(qq->arr, sizeof(int) * qq->cap);
qq->arr[qq->back++] = num;
qq->elements++;
}
else
{
qq->arr[ qq->back++ ] = num;
qq->elements++;
}
}
int dequeue( Queue * qq)
{
int i;
if(empty(qq->arr))
{
printf("ITS EMPTY!!\n");
}
else
{
qq->elements--;
qq->arr[qq->front] = 0;
for(i=0; i<qq->elements; i++)
{
qq->arr[i] = qq->arr[i+1];
}
}
return (int)qq->arr;
}
int empty( Queue * qq)
{
int test = 0;
if(qq->arr == NULL)
{
test = 1;
}
return test;
}
int length(Queue * qq)
{
return qq->elements;
}
void printArr(Queue * qq)
{
int i;
for(i=0; i<qq->elements; i++)
{
printf("%d ", qq->arr);
}
}
void freeArr( Queue * qq)
{
if(qq != NULL)
{
free(qq->arr);
free(qq);
{
}
queue.h
Code:
typedef struct
{
int cap;
int *arr;
int front;
int back;
int elements;
} Queue;
void init (Queue * qq);
void enqueue( Queue * qq, int num );
int dequeue( Queue * qq);
int empty (Queue * qq);
int length ( Queue * qq);
void printArr(Queue * qq);
void freeArr ( Queue * qq);
test.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
int main()
{
int choose = 0;
int num;
Queue q;
printf("welcome to the queue ........");
printf("1. enqueue\n");
printf("2. dequeue\n");
printf("3. print\n");
printf("4. Check if queue is empty:\n");
printf("5. get length\n");
printf("6. free queue\n");
scanf("%d", &choose);
switch(choose)
{
case 1:
scanf("Enter a number to engueue: %d\n", &num);
enqueue(&q, num);
break;
case 2:
dequeue(&q);
break;
case 3:
printArr(&q);
break;
case 4:
empty(&q);
break;
case 5:
length(&q);
break;
case 6:
freeArr(&q);
break;
}
return 0;
}