Как выполнить поиск в очереди?

#c #search #data-structures #queue

#c #Поиск #структуры данных #очередь

Вопрос:

Предположим, если я введу данные 5 пассажиров, я смогу получить данные только первого пассажира, даже если я буду искать данные 4-го пассажира.Мне нужно найти любой элемент в списке.If current= frontq; при поиске отображается первый элемент.

код:

 int search()
{   struct bag *next;

    char *n,*f;


    current=frontq;
    printf("Enter name to be searched:n");
    scanf("%s",amp;n);
    printf("nEnter the  flight numbern");
    scanf("%s",amp;f);
    while((current->name==n)amp;amp;(current->fl_no==f))
    {
    current=current->next;
    next  ;
    }
     printf ("n The Searched luggage isn");
    printf("%sn",current->name);
    printf("%sn",current->dest);
    printf("%sn",current->fl_no);
return 0;
    }
 

Комментарии:

1. Время научиться использовать отладчик для пошагового выполнения кода оператор за оператором при мониторинге переменных и их значений. Для таких вещей, как списки, также полезно использовать ручку и бумагу для рисования списка, указателей и выполняемых операций.

2. ‘current->name==n’ ….. Google или man ‘strcmp’.

3. И, кажется, вы спали, когда ваш учитель учил scanf и как им пользоваться. Или вы просто пропустили самые ранние главы своей книги или руководства для начинающих.

4. «Я могу получить только данные первого пассажира»… Я подозреваю, что ваш список все равно заблокирован, хотя это может быть какой-то артефакт UB scanf / pointer, отмеченный @Someprogrammerdude

Ответ №1:

Не уверен, что содержит структура очереди, но предполагаю некоторые вещи….

Вы сравниваете указатели имен, а не содержимое имени current->name==n — используйте функцию strcmp.

Кроме того, scanf считывает запрос на имя в ссылки на память по n, который не назначен — вам нужно объявить буфер:

char n[100];

И scanf scanf("%s",n); не должно быть scanf("%s",amp;n);

Комментарии:

1. Спасибо! Это определенно помогло мне!

Ответ №2:

Для начала эти указатели

 char *n,*f;
 

не инициализируются и имеют неопределенные значения.

И эти вызовы scanf

 scanf("%s",amp;n);
scanf("%s",amp;f);
 

используйте неправильные аргументы и в результате вызывайте неопределенное поведение.

Вам нужно объявить массивы соответствующих размеров, например

 char n[N], f[N];
 

где N — некоторые значения и, по крайней мере, в вызовах scanf для записи

 scanf( "%s", n);
scanf( "%s", f);
 

Также в состоянии цикла while, который записан неправильно, сравниваются указатели

 while((current->name==n)amp;amp;(current->fl_no==f))
 

вы должны написать

 while( current != NULL amp;amp; 
       !( strcmp( current->name, n ) == 0 amp;amp; strcmp( current->fl_no, f ) == 0 ) )
 

И после цикла вы должны написать

 if ( current != NULL )
{
    printf ("n The Searched luggage isn");
    printf("%sn",current->name);
    printf("%sn",current->dest);
    printf("%sn",current->fl_no);
}
 

Кроме того, возвращаемое значение функции не имеет смысла. Лучше написать возвращаемое выражение следующим образом

 return current != NULL;
 

В этом случае пользователь функции может проверить, был ли найден требуемый элемент очереди или нет.

Комментарии:

1. Спасибо! Это определенно помогло мне!