Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
139 / 139 / 39
Регистрация: 26.02.2011
Сообщений: 548

однонаправленная очередь

29.10.2012, 12:49. Показов 1398. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема следующая,это одноноправленная очередь.

1)Создую очередь,удалаю элементы,все хорошо,НО тут же хочу создать заново очередь,пишет при добавлении элемента порвеждение кучи,помогите поправить.

Code
1
2
3
4
5
ОС Windows инициировала точку останова в aaa.exe.
 
Это может быть вызвано повреждением кучи и указывает на ошибку в aaa.exe или в одной из загруженных им DLL.
 
Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит aaa.exe
Выведенное на экран окно содержит дополнительные данные для диагностики ошибки

2)Нужно было добавить "+" в конец элемент и удалить "-" из начало ,сделать перегруженными,я правильно сделал?если нет скажите как должно выглядеть


.h

Код:

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
#include "stdafx.h"
#include <string.h>
#include <iostream>
#include <conio.h>
 
#ifndef Turn_H 
#define Turn_H
 
using namespace std;
 
class Turn
{
private:
        struct Point
        {
                int key;//информативное поле
                Point *next;
        };
        Point* first;       //указатель на первый элемент списка
        Point* current;     //указатель на текущий элемент списка
 
public:
        Turn();
        virtual ~Turn();
        void operator +(int);
        void operator -(int&);
        void print();
};
#endif
.cpp

Код:

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
#include "stdafx.h"
#include "Turn.h"
 
Turn::Turn()
{
    first = 0;
    current = 0;
}
 
Turn::~Turn()
{
    if(first)//если список не пуст
    {
        current=first;
    }
    while(first)//пока список не пуст
    {
        first=first->next;//взяли следующий элемент
        delete current;//освобождение памяти.Удалили текущий
        current=first;
    }
}
 
void Turn::operator + (int a)
{
    Point* ph = new Point;
    ph->key=a;           //заполнение информатвного поля
    ph->next = 0;
    if (current!=0)
    {
        current->next = ph;
        current = ph;
    }
    else
    {
        ph->next = 0;
        first = ph;
        current = ph;
    }
}
 
void Turn::operator - (int &a)
{
    if(first)
    {
   // a = first->key;
    Point* ph = first;
    first = first->next;
    delete ph;
    cout<<"Элемент успешно удален....";
    }
    else
    {
         cout<<"Список пуст!";    
    }
}
 
void Turn::print()
{
    if(first)
    {
    Point* temp=first;
    cout<<"Список: ";
    while(temp)
    {
        cout << " " << temp->key;
        temp = temp->next;
    }
    cout << endl;
    }
    else
    {
        cout<<"Список пуст!";
    }
}
main.cpp
Код:
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
#include "stdafx.h"
#include "Turn.h"
 
int main()
{
    setlocale(LC_ALL,"Russian");
    Turn w; 
    int b=0,a;
    while(true)
    {
        cout<<"1) Добавить элемент в конец очереди"<<endl;
        cout<<"2) Вывести на экран очередь"<<endl;
        cout<<"3) Извлечь элемент из начала очереди(удалить)"<<endl;
        cout<<"4) Выход"<<endl<<endl;
        cout<<"Ввод: "; 
        cin>>b;
        switch(b)
        {
        case 1 : 
        
            system("cls");
            cout<<"Введите значение: ";
            cin>>a;
            w+a;
            system("cls");
            continue;
        
        case 2:
 
                system("cls");
                w.print();
                getch();
                system("cls");
                continue;
 
        case 3:
        
                system("cls");
                w-a;
                getch();
                system("cls");
                continue;
        
        case 4:
        
                 break;
        
        default: cout<<"Error!"<<endl<<endl;
                 continue;
        }
        break;
    }
    return 0;
}
Добавлено через 53 минуты
Ошибки поправил в нескольких местах, например вместо

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Turn::operator + (int a)
{
    Point* ph = new Point;
    ph->key=a; 
    ph->next = 0;
    if (current!=0)
    {
        current->next = ph;
        current = ph;
    }
    else
    {
        ph->next = 0;
        first = ph;
        current = ph;
    }
}
написал

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Turn::operator + (int a)
{
    Point* ph = new Point;
    ph->key=a; 
    ph->next = 0;
    if (first)
    {
        current->next = ph;       
        current = current->next;
    }
    else
    {
        first = ph;
        current = ph;
    }
    cout<<"Элемент добавлен";
}
Перегрузку верно сделал саму?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2012, 12:49
Ответы с готовыми решениями:

Кольцевая однонаправленная очередь
Здравствуйте! Нужно реализовать кольцевую однонаправленную очередь. С простой очередью разобрался, но точную информацию про &quot;кольцевую...

Сформировать односвязную очередь из элементов, которые входят в очередь Q1, но не входят в очередь Q2
Составить программу обработки динамической структуры данных: сформировать односвязную очередь Q из элементов, которые входят в очередь Q1,...

Очередь (сделать очередь, чтобы добавляло, удаляло, читало. Не STL.)
Помогите пожалуйста написать очередь. Есть Температура double и ее тип int ну и нужно сделать очередь, чтобы добавляло, удаляло, читало....

4
58 / 58 / 13
Регистрация: 12.11.2011
Сообщений: 109
29.10.2012, 15:00
Перепиши этот метод. Надо обнулять ссылку на объект current.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Turn::operator - (int &a)
{
    if(first)
    {
   // a = first->key;
    Point* ph = first;
    first = first->next;
    delete ph;
    if(first == NULL) current = NULL;
    cout<<"Элемент успешно удален....";
    }
    else
    {
         cout<<"Список пуст!";
    }
}
1
139 / 139 / 39
Регистрация: 26.02.2011
Сообщений: 548
29.10.2012, 16:34  [ТС]
Норм,доидеализировал код.Теперь такой вопрос,а как имеенно в с++ проверяется проверка на символ,в си я бы это сделал так

C++
1
while(!fflush(stdin)&&printf("Vvedite chislo x: ")&&!scanf("%f",&x)); //если x флоат
0
58 / 58 / 13
Регистрация: 12.11.2011
Сообщений: 109
29.10.2012, 17:25
C++
1
2
3
4
while(!fflush(stdin) && printf("Vvedite chislo x: ") && !(cin >> x))
{
    cin.clear();
}
1
139 / 139 / 39
Регистрация: 26.02.2011
Сообщений: 548
29.10.2012, 18:02  [ТС]
Пасиб ,в дальнейшем буду применять этот метод
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2012, 18:02
Помогаю со студенческими работами здесь

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

Дана очередь с вещественными числами, упорядоченными по убыванию. Добавить в очередь среднее арифметическое элементов
Дана очередь с вещественными числами, упорядоченными по убыванию. Добавить в очередь среднее арифметическое элементов очереди, не...

Задача на очередь (вывод сообщения, что очередь пуста)
Доброго дня! Есть задачка на очередь, которая работает нормально, только надо добавить код, чтобы выводил сообщение, что очередь пуста.....

Очередь, теория. Очередь на шести стеках
Здравствуйте, пытаюсь побольше найти информации про очереди и их применение в программировании. Из того что я нашел, все описывается лишь...

Работа с очередью. Умейте поставить в очередь элемент, удалить элемент из очереди, пересмотреть очередь
То чувство , когда изучали web и тут нам дают задачу по с++ ... Нужна помощь !!


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru