2014-11-11 4 views
0

FIFO (first in first out)와 같은 큐를 증명하는 코드를 작성하려고합니다. 나는 네 글자 p (rint), e (nqueue), d (equeue), q (uit)를 가지고있다. 문제는 내가 d를 누르면 첫 번째 문자가 제거되어야한다는 것입니다. d를 누르면 숫자가 두 배가됩니다. 내 잘못은 어디 갔지? 모든 감사 답변에 감사드립니다. 게다가, 나는 내 실수가 dequeue 함수에 있다고 생각한다.배열을 사용한 큐 작성

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"); 

} 

답변

2

당신은 라인

printqueue(arr,tail); 
+0

printqueue(arr,count); 

를 교체해야합니다 당신은 당신의 말과 같은 코드를 시도 했습니까? 나는 내 수를 두 배로 늘리려고했다. 네 말하기 전에 해냈어. 그것이 틀린 또 다른 잘못이있다. –

+0

count는 deque에서 감소하는 값이 아닙니다. tail은 대기열에서 대기열에서 증가하고 대기열에서 대기열에서 감소하는 값입니다. – tinyfiledialogs

+0

okey. 문자를 눌렀을 때 '카운터 -;'또 다른 문제가 있습니다. –