user4093559
user4093559

Reputation:

queue making using arrays

I'm trying to write a code that proves a queue like fifo (first in first out). I have four characters p(rint),e(nqueue),d(equeue) and q(uit). The problem is when I press d a first character must get rid of, but not. When I press d the numbers get double. Where is my wrong ? Thank you for all appreciated answers. Besides, I think my wrong is in the dequeue function.

Example input:
e 2 3 9 8 7
p
2 3 9 8 7
d
p
3 9 8 7
d
p
9 8 7

#include <stdio.h>

void enqueue(int queue[], int newnum, int *tail_p, int maxsize);
void deque(int queue[], int *tail_p, int *elem);
void printqueue(int queue[],int count);

int main(){

    int arr[10];
    int num;
    int tail=0;
    char ch;
    int i;
    int count=0;
    int elem;

    do{
    scanf("%c",&ch);
    if(ch=='e')
    for(i=0;i<10 && (ch!='\n');i++){
        //arr[i]=scanf("%d",&num);
        scanf("%d",&num);
        scanf("%c",&ch);
        enqueue(arr,num,&tail,10);
        count++;
    }
    if(ch=='d'){

        deque(arr,&tail,&elem);

    }
    if(ch=='p')
    printqueue(arr,count);
    }
    while(ch!='q');
    return 0;
}
void printqueue(int arr[],int size){

    int i;

    for(i=0;i<size;i++)
    printf("%d  ",arr[i]);

}

void enqueue(int queue[], int newnum, int *tail_p, int maxsize){

    if(maxsize>*tail_p){
        queue[*tail_p]=newnum;
        *tail_p+=1;
    }
    else
        printf("error! maxsize\n");
}
void deque(int queue[], int *tail_p, int *elem_p){

    int i;

    if(0<*tail_p){

        *elem_p=queue[0];
        for(i=1;i<*tail_p;i++){
            queue[i-1]=queue[i];
            *tail_p-=1;}
    }
    else
        printf("error! tail is greater than 0\n");

}

Upvotes: 0

Views: 86

Answers (1)

tinyfiledialogs
tinyfiledialogs

Reputation: 1355

You should replace the line

printqueue(arr,count);

with

printqueue(arr,tail);

Upvotes: 2

Related Questions