0

en_queueこれは、さまざまな条件で新しい要素を挿入するための私の関数です。

void en_queue(int *queue,int max,int front,int rear)
{
    int ch1;
    printf("\n Enter element to add->");
    scanf("%d",&ch1);
    if(front==0 && rear==(max-1))
    {
        printf("\n Caution!! Queue Overflow!!");
    }
    else if(rear==(max-1) && front>0)
    {
        rear=0;
        queue[rear]=ch1;
        printf("\n %d added to the queue where front fo the queue has room but rear does not" ,ch1);
    }
    else if(front==-1 && rear==-1)
    {
        front=rear=0;
        queue[rear]=ch1;
        printf("\n %d added to the queue where this is the first element to the queue" ,ch1);
    }
    else 
    {
        rear++;
        queue[rear]=ch1;
        printf("\n %d added to the queue where the element added in the rear" ,ch1);
    }
}

ここに私のshow_queue機能があります。

void show_queue(int *newqueue,int front,int rear)
{
    int i=0;
    for(i=front;i<=rear;i++)
    {
        printf("%d",newqueue[i]);
    }
}

print ステートメントによって、要素が常に最初の位置に挿入されていることを確認します。したがって、私の最善の推測は、rear要素frontが正常に更新されていないことですが、その理由を見つけることができません。また、少なくともshow_queue関数によって正しく挿入された最初の値が表示されているはずです。代わりに、ガベージ値が表示されますが、値は一定です。毎回4235968

更新 -要求された主な機能は次のとおりです。

#include<stdio.h>
#include<stdlib.h>

#define MAX 10

void en_queue(int *,int, int, int);
void show_queue(int *,int,int);

int main()
{
    int queue[MAX],front=-1,rear=-1,ch;
    do{
        printf("\n <<Queue MENU>>");
        printf("\n 1. Add Element");
        printf("\n 2. Delete Element");
        printf("\n 3. Show Queue");
        printf("\n 4. Exit menu");
        printf("\n Enter your choice->");
        scanf("%d", &ch);

        switch(ch)
        {
            case 1: en_queue(queue,MAX,front,rear);
                break;
            /*  
            case 2: del_queue(queue,MAX,front,rear);
                 break;
             */
            case 3: printf("\n The queue is->");
                show_queue(queue,front,rear);
                break;

            case 4:exit(0);

            default: printf("\n Invalid Choice!!!");
                return 0;
        }
    } while(ch!=4);

    return 0;
}
4

2 に答える 2

1
    else 
    {
        rear++;
        queue[rear]=ch1;
        printf("\n %d added to the queue where the element added in the rear" ,ch1);
    }

リア++ を *リア++ に変更します。それはあなたの問題を解決するはずです。

編集:

コードを修正してみましたが、問題は *rear++ のようです。

    *rear++ to (*rear)++
于 2013-09-13T08:24:34.127 に答える