Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 531
#1

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

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

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

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

Код
ОС 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2012, 12:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос однонаправленная очередь (C++):

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

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

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

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

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

Создать очередь. Добавить элемент в очередь. Удалить элемент из очереди - C++
Нужно создать очередь. Добавить элемент в очередь. Удалить элемент из очереди. Вот моё &quot;творение&quot;. int main() { int...

4
extenup
54 / 54 / 3
Регистрация: 12.11.2011
Сообщений: 109
29.10.2012, 15:00 #2
Перепиши этот метод. Надо обнулять ссылку на объект 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
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 531
29.10.2012, 16:34  [ТС] #3
Норм,доидеализировал код.Теперь такой вопрос,а как имеенно в с++ проверяется проверка на символ,в си я бы это сделал так

C++
1
while(!fflush(stdin)&&printf("Vvedite chislo x: ")&&!scanf("%f",&x)); //если x флоат
0
extenup
54 / 54 / 3
Регистрация: 12.11.2011
Сообщений: 109
29.10.2012, 17:25 #4
C++
1
2
3
4
while(!fflush(stdin) && printf("Vvedite chislo x: ") && !(cin >> x))
{
    cin.clear();
}
1
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 531
29.10.2012, 18:02  [ТС] #5
Пасиб ,в дальнейшем буду применять этот метод
0
29.10.2012, 18:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2012, 18:02
Привет! Вот еще темы с ответами:

Очередь - C++
Привет всем. Я тут решаю в общем то простое упражнение - нужно проверить переполнение и опустошение очереди. Есть у меня небольшая...

Очередь - C++
Задача проги сделать очередь, по сути прога написана по лекции, но выдает ошибки с преобразованием параметра, понимаю, что ошибки глупые,...

Очередь - C++
В чем проблема? не хочет запускаться код? Ошибки следующие: #include &lt;iostream&gt; #include &lt;queue&gt; using namespace std; ...

C++ Очередь - C++
Предисловие к заданию: Определить структуру очереди и разработать функции, которые необходимы для работы с заданным контейнером: ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru