'using queue and stack to reverse odd number only in a queue and other functions

#include <stdio.h>
#include <stdlib.h>
#define type int
#define qsize 40

typedef struct {
    int top;
    type array[qsize];
}stack;
stack *initstack (){
    stack *s=malloc(sizeof(stack)); s->top =0;
    return s;
}
void push(stack *s,type x){
    s->array[s->top++]=x;
}
type pop(stack *s){
    return s->array[--s->top];
}
type isfulls(stack *s){
    return s->top>=qsize;
}
type isemptys(stack *s){
    return !s->top;
}
type peek(stack *s){
    return s->array[s->top-1];
}
//----------------------------------------------------
typedef struct {
    type head;
    type tail;
    int Qnoe;
    type elements[qsize];
}queue;
queue *initqueue(){
    queue *s=malloc(sizeof(queue));
    s->Qnoe=0;  s->head=0;  s->tail=-1;
    return s;
}
void enqueue(queue *s,type e){
    s->elements[++s->tail%qsize]=e; s->Qnoe++;
}
type dequeue(queue *s){
    type temp=s->elements[s->head++%qsize];
    s->Qnoe--; return temp;
}
int isempty(queue *s){
    return !s->Qnoe;
}
int isfull(queue *s){
    return s->Qnoe==qsize;
}
type gethead(queue *s){
    return s->elements[s->head];
}
type gettail(queue *s){
    return s->elements[s->tail];
}

void display(queue *s){   ///used just to display the functions
    queue *temp=initqueue();
    while(!isempty(s)){
        type x=dequeue(s);
        printf("%d      ",x);
        enqueue(temp,x);
    }
    printf("\n\n");
    while(!isempty(temp)) enqueue(s,dequeue(temp));
}
int maxvalue(queue *s){
    type max,head;
    queue *temp=initqueue();if(!isempty(s)) {enqueue(temp,dequeue(s)); max=gethead(s);}
    while (!isempty(s)){
        head=gethead(s);
        if(max<head) max=head;
        enqueue(temp,dequeue(s));
    }
    while(!isempty(temp)) enqueue(s,dequeue(temp));
    return max;
}
void swap(queue *s){
    type head=gethead(s),tail=gettail(s);int i=0,j=1;
    queue *temp=initqueue();
    while(!isempty(s)) {i++; enqueue(temp,dequeue(s));}
    dequeue(temp); enqueue(s,tail); ;
    while(!isempty(temp)){
        if(j++==i-1) {enqueue(s,head); break;}
        else {enqueue(s,dequeue(temp));}
    } free(temp);
}
void insert(queue *s,type e,int index){
    queue *temp=initqueue(); int i=1;
    while(!isempty(s)){
        if(index==i++) {enqueue(temp,e); dequeue(s);}
        else enqueue(temp,dequeue(s));
    }
    while(!isempty(temp)) enqueue(s,dequeue(temp));
}
void revercOdd(queue *s){
    queue *tempq=initqueue();
    stack *temps=initstack();
    while(!isempty(s)){
        if(gethead(s)%2){push(temps,dequeue(s)); enqueue(tempq,1);}
        else enqueue(tempq,dequeue(s));
    }
    while(!isempty(tempq)){
        if(gethead(tempq)==1){enqueue(s,pop(temps)); dequeue(tempq);}
        else enqueue(s,dequeue(tempq));
    }
}


int main()
{
    queue *s=initqueue();
    enqueue(s,5);
    enqueue(s,8);
    enqueue(s,3);
    enqueue(s,2);
    enqueue(s,1);
    enqueue(s,0);
    enqueue(s,112);
    printf("the queue: \n");
    display(s);
    printf("max value in queue : %d\n\n",maxvalue(s));
    swap(s);
    printf("the queue after swapping the head and tail: \n");
    display(s);
    printf("\nthe queue: \n");
    display(s);
    type e,index;
    printf("enter he value of the elemnt and the index: ");
    scanf("%d%d",&e,&index);
    insert(s,e,index);
    printf("the queue after inserting %d in the index %d:  \n",e,index);
    display(s);
    printf("\nthe queue: \n");
    display(s);
    revercOdd(s);
    printf("the queue after reversing odd number only: \n");
    display(s);
    return 0;
} 

I made 4 functions 1 to get the max element in the queue 1 to get swap the head and tail of the queue 1 to take an element and index and put it in that index in the queue and 1 to reverse odd numbers only in a queue using queue and stack and a function to display the element of a given queue to check results and in the main, I check the outputs of every function work on its own, but when I use them together the last display shows the garbage element in the queue:



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source