Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/187: Рейтинг темы: голосов - 187, средняя оценка - 4.84
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 113

Программная реализация очереди

25.06.2012, 11:06. Показов 37420. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, подскажите, почему не правильно работает программа, ругается на функцию EmptyQ
программу надо запускать в консольном приложении в VS 2008


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "stdafx.h"
#include "conio.h"
#include "iostream"
#include "locale.h"
 
struct QUEUE //структура очередь
{
    int info;
    QUEUE *next;
}
 
int EmptyQ(QUEUE *first) //проверка пустоты очереди
{
    if (first->next==NULL)
    return 1;
    else
    return 0;
}
 
void AddQ(QUEUE **last) //добавление элемента
{
    QUEUE *tmp = new QUEUE;
    tmp->info=rand()%100;
    tmp->next=NULL;
    (*last)->next=tmp;
    *last=tmp;
}
 
void DelQ(QUEUE *first, QUEUE **last) //удаление из очереди
{
    QUEUE *tmp=first->next;
    if(first->next==NULL)
    *last=first;
    delete tmp;
}
 
void ShowQ(QUEUE *first) //просмотр очереди
{
    QUEUE *tmp=first->next;
    while(tmp!=NULL)
    {
        printf("%d ", tmp->info);
        tmp=tmp->next;
    }
}
 
void ClearQ(QUEUE **first, QUEUE **last) //очистка очереди
{
    QUEUE *tmp;
    while(first->next!=NULL)
    {
        tmp=first->next;
        first->next = first->tmp;
        delete tmp;
    }
    *last=first;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    QUEUE *first, *last;
    int n;
    char d;
    do
    {
        printf("1. Добавление элементов в конец очереди \n");
        printf("2. Удаление элемента из начала очереди \n");
        printf("3. Вывод элементов \n");
        printf("0. Выход \n");
        printf("Выбранное действие: ");
        scanf("%s", &d);
        switch(d)
        {
            case '1':
            AddQ(&last);
            printf("\nЭлемент добавлен в конец очереди \n");
            break;
 
            case '2':
            if (EmptyQ(first)==1)
            printf("\nОчередь пустая \n");
            else
            {
                DelQ(first,&last);
                printf("\nЭлемент удален из очереди \n");
            }
            break;
 
            case '3':
            if (EmptyQ(first)==1)
            printf("\nОчередь пустая \n");
            else
            {
                printf("\nЭлементы очереди: ");
                ShowQ(first);
                printf("\n");
            }
            break;
 
            case '0':
            ClearQ(first,&last);
            break;
            default: printf("\nОшибка!\n"); break;
        }while(d!='0');
    _getch();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2012, 11:06
Ответы с готовыми решениями:

Программная реализация алгоритма Khufu
Люди,не могу найти программную реализацию по алгоритму khufu мб знает кто как его решать?

Программная реализация древесной сортировки
Программная реализация древесной сортировки Указания: - использовать динамический массив - реализовать графическое представление...

Программная реализация задач на множествах
Здравствуйте! помогите пожалуйста написать задачу в С++ на тему :Программная реализация задач на множествах (объединение , Пересечение,...

12
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
25.06.2012, 11:12
C++
1
2
3
4
5
6
7
int EmptyQ(QUEUE **first) //проверка пустоты очереди
{
    if ((*first)==NULL)
    return 1;
    else
    return 0;
}
3
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 11:16
Еще один пример реализации кода на языке C на языке C++?
А ошибка наверно из-за того, что, когда добавляется новый элемент, то указатель last меняется, но не меняется first. Т.е. first - неправильный указатель и при обращении first->next возникает ошибка.

Добавлено через 3 минуты
В функции DelQ(QUEUE *first, QUEUE **last). Второй параметр - это двойной указатель, но почему первый не тоже? Понятное дело, что если будет удаляться первый элемент списка, то указатель first в main тоже должен измениться.
0
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 113
25.06.2012, 11:17  [ТС]
а как нужно тогда?
0
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 11:19
Да и еще проблема, по идее так как под указатель last не выделена память, то обращение (*last)->next=tmp; тоже должно приводить к ошибке.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
25.06.2012, 11:19
darkknight2008, да вы правы, я просто только на функцию EmptyQ и посмотрел )
0
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 113
25.06.2012, 11:19  [ТС]
помоги пожалуйста сделать как нужно, а то я вообще не понимаю, много очень ошибок(
0
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 11:24
Во первых т.к. ты вроде стараешься писать на C++, то код должен соответствовать языку.
Во вторых, в начале запуска программы список у тебя пуст, т.е. ото надо отобразить через указатели first и last. Напирмер дай им начальное значение NULL. При добавлении нового элемента: Если у тебя список пуст, то треубется изменить указатель на первый элемент и на последний, если список не пуст, то изменяется только на последний. При проверке пуст ли список - достаточно проверить укзаатель на первый элемент, если first==NULL, то значит список пуст. Во всех остальных функциях подобные ошибки.
0
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 113
25.06.2012, 11:29  [ТС]
darkknight 2008, можно тебя попросить самому у меня испраивть, а то я очь плохо разбираюсь в этом, а такое задание дали, чуть чуть там же подправить, сможешь помочь???
0
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 11:34
Чуть-чуть сводится к переписыванию каждой функции. А тем более я совершенно не дружу с языком C. Но не у тебя одного возникали траблы с очередью, так что если ты прошуршиш раздел по языку C, то найдешь то что требуется.
0
3 / 3 / 3
Регистрация: 04.04.2013
Сообщений: 247
03.06.2013, 21:57
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <conio.h>
#include <iostream>
#include <locale.h>
 using namespace std;
struct QUEUE //структура очередь
{
    int info;
    QUEUE *next;
};
 
int EmptyQ(QUEUE *first) //проверка пустоты очереди
{
    if ((first)==NULL)
    return 1;
    else
    return 0;
}
 
void AddQ(QUEUE ** last) //добавление элемента 
{
    QUEUE *tmp = new QUEUE;
    tmp->info=rand()%100;
    tmp->next=NULL;
    (*last)->next=tmp;
    *last=tmp;
}
 
void DelQ(QUEUE *first, QUEUE ** last) //удаление из очереди 
{
    QUEUE *tmp=first->next;
    if(first->next==NULL)
    *last=first;
    delete tmp;
}
 
void ShowQ(QUEUE *first) //просмотр очереди
{
    QUEUE *tmp=first->next;
    while(tmp!=NULL)
    {
        cin>>tmp->info;
        tmp=tmp->next;
    }
}
 
void ClearQ(QUEUE *first, QUEUE ** last) //очистка очереди 
{
    QUEUE *tmp;
    while(first->next!=NULL)
    {
        tmp=first->next;
        first->next = tmp;
        delete tmp;
    }
   * last=first;
}
 
int main()
{
    setlocale(0, "rus");
    QUEUE *first, *last;
    int n;
    char d;
    do
    {
        cout<<"1. Добавление элементов в конец очереди \n"<<endl;
        cout<<"2. Удаление элемента из начала очереди \n"<<endl;
        cout<<"3. Вывод элементов \n"<<endl;
        cout<<"0. Выход \n"<<endl;
        cout<<"Выбранное действие: "<<endl;
        cin>> d;
        switch(d)
        {
            case 1:
            AddQ(&last);
            cout<<"\nЭлемент добавлен в конец очереди \n"<<endl;
            break;
 
            case 2:
            if (EmptyQ(first)==1)
            cout<<"\nОчередь пустая \n";
            else
            {
                DelQ(first,&last);
                cout<<"\nЭлемент удален из очереди \n"<<endl;
            }
            break;
 
            case 3:
            if (EmptyQ(first)==1)
            cout<<"\nОчередь пустая \n"<<endl;
            else
            {
               cout<<"\nЭлементы очереди: "<<endl;
                ShowQ(first);
                cout<<"\n";
            }
            break;
 
            case 0:
            ClearQ(first,&last);
            break;
            default: cout<<"\nОшибка!\n"<<endl; break;
          }
       }while(d!=0);
    _getch();
}
0
 Аватар для Левый_Програмер
1 / 1 / 0
Регистрация: 23.08.2011
Сообщений: 22
08.04.2014, 23:52
Почему все без классов делают? С++ ведь, а не С...
Вот ссылочка на реализацию очереди и описание её структуры.
Может кому поможет.
1
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 1
01.12.2015, 13:25
афаа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2015, 13:25
Помогаю со студенческими работами здесь

Программная реализация асимметричного алгоритма RSA
Помогите в написании программной реализации асимметричного алгоритма RSA в диапазоне простых чисел 50 – 200 на языке с++

Программная реализация динамического списка динамических списков
Обучаюсь удаленно через интернет. И тут такая штука. Случайно нажал кнопку &quot;Сдать курсовую&quot;. А темы я даже еще не изучал по...

Организация кольцевого буфера. Программная реализация монитора
Ребят помогите решить задание по параллельному программированию, завтра уже крайняк сдать надо: Организация кольцевого буфера....

Программная реализация алгоритмов решения нелинейных уравнений
Помогите пожалуйста с 9 вариантом.

Программная реализация простого бесприоритетного планировщика потоков
Программная реализация простого бесприоритетного планировщика потоков. Исходные данные: - возможные состояния потоков: выполнение,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru