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");
}
와
를 교체해야합니다 당신은 당신의 말과 같은 코드를 시도 했습니까? 나는 내 수를 두 배로 늘리려고했다. 네 말하기 전에 해냈어. 그것이 틀린 또 다른 잘못이있다. –
count는 deque에서 감소하는 값이 아닙니다. tail은 대기열에서 대기열에서 증가하고 대기열에서 대기열에서 감소하는 값입니다. – tinyfiledialogs
okey. 문자를 눌렀을 때 '카운터 -;'또 다른 문제가 있습니다. –