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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ БСА http://www.cyberforum.ru/cpp-beginners/thread683185.html
БСА для вычисления функции y=f(x). При условии, что в каждом блоке может находиться только одна арифметическая операция
C++ Задача про планировщик Друзья, очень надо, код написать помогите а, нужно в консольном приложении visual studio 2008 http://www.cyberforum.ru/cpp-beginners/thread682475.html http://www.cyberforum.ru/cpp-beginners/thread683181.html
Файлы компилируется, но программа не запускается C++
Сразу хочу успокоить, что ошибка не в том, что в проект не были включены необходимые файлы. Файлы компилируется, но программа не запускается по следующей причине: Вывод компилятора: ...
C++ Счастливые билеты
Здравствуйте, имеется интересная задачка. Вводится первое и последнее возможные числа билетовЮ, нужно посчитать сколько счастливых билетов находиться в данном диапазоне. Билет считается счастливым...
C++ Превращение строки в название исполняемой функции http://www.cyberforum.ru/cpp-beginners/thread683146.html
Доброго времени суток. Появился вопрос. Предположим есть TextBox, кнопка и набор функций: void text1(){ this->Text="Абырвалг"; } void text2(){ this->Text="Главрыба"; }
C++ Таблицы в С++ #include "stdafx.h" #include <iostream> #include <iomanip> #include <conio.h> #include <stdio.h> #define L 80 const int N=3; #define STOP "*" using namespace std; подробнее

Показать сообщение отдельно
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 530

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

29.10.2012, 12:49. Просмотров 491. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru