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

ООП. Вложенные структуры. Двунаправленные списки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с STL vector http://www.cyberforum.ru/cpp-beginners/thread1157828.html
Добрый день! Прошу объяснить следующие моменты связанные с <vector> (почему ругается студия, откуда берутся такие результаты) и дать совет, как стоить изменить перегруженные операторы . I....
C++ С ++ разделяющий пробел и новая строка С ++ разделяющий пробел и новая строка Как отличить при считывании из файла чисел Допустим 3 -5 6 8 2 0 8 -1 10 3 11 5 Нужно считать в vector< vector<int> > Изначально не зная размера! http://www.cyberforum.ru/cpp-beginners/thread1157818.html
String и его приколы. Что и как сравнивается C++
Цитата из книги: " Если две строки имеют разные длины и каждый символ которткий строки равен соответствующему символу длинной строки то короткая строка меньше длинной." Что за прикол? А не проше...
Как сделать поиск в String по маске? C++
String str="<One>Hello<Strong>World<Two>"; как сделать поиск по маске в String, "<*>" чтобы программа искала только "<" и ">" а то что внутри считалось бы за * Добавлено через 2 часа 52 минуты...
C++ Int to String http://www.cyberforum.ru/cpp-beginners/thread1157792.html
Подскажите стандартную функцию для конвертирования Int to String или других чисел в string
C++ Умножение матрицы a[i][j] на b[x][y]! Есть две матрицы A и B размер которых задаёт и вводит пользователь с клавиатуры, матрицы хоронятся в динамических массивах соответственно a b. Проблема заключается в том, как организовать алгоритм... подробнее

Показать сообщение отдельно
onlwork
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53

ООП. Вложенные структуры. Двунаправленные списки - C++

26.04.2014, 11:20. Просмотров 530. Ответов 5
Метки (Все метки)

Доброго времени суток, помогите мне пожалуйста:

Структура (header)
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
#include <stdio.h>
class CGraph {
private:
    struct Graph{
        int mainVertex;
        Graph * nextMainVertex;
        Graph * prevMainVertex;
        int numberVertex;
 
        Graph(int newMainVertex, Graph *newNextMainVertex = NULL, Graph *newPrevMainVertex = NULL)
        {
            mainVertex = newMainVertex; 
            nextMainVertex = newNextMainVertex;
            prevMainVertex = newPrevMainVertex;
            numberVertex = 0;
        }
        struct adjacentVertex{
            int Vertex;
            adjacentVertex * nextAdjacentVertex;
            adjacentVertex * prevtAdjacentVertex;
 
            adjacentVertex(int newVertex, adjacentVertex *newNextAdjacentVertex = NULL, 
                adjacentVertex *prevNextAdjacentVertex = NULL)
            {
                Vertex = newVertex; 
                nextAdjacentVertex = newNextAdjacentVertex;
                prevtAdjacentVertex = prevNextAdjacentVertex;
            }
    };
        adjacentVertex *adjacentVertexEl;
};
 
    Graph *head, *tail;
    Graph::adjacentVertex *ahead, *atail;
 
    int GnumberVertex;
public:
    CGraph():head(NULL), tail(NULL), ahead(NULL), atail(NULL){}
 
    void addMainVertex(int mainVertex);
    void addAdjacentVertex(int mainVertex, int adjacentVertex);
    void printGraph();
    //int getNumberVertex(int Vertex);
    void setGnumberVertex(int GnumberVertex);
    void setNullGnumberVertex(int GnumberVertex);
    int getGnumberVertex();
 
};
Реализация заголовочного файла

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
#pragma one;
#include "stdafx.h"
#include "structGraph.h"
#include <iostream>
 
void CGraph::addMainVertex (int mainVertex)
{   if(CGraph::GnumberVertex < 0)
    {
        this -> setNullGnumberVertex(0);
    }
    Graph *newGraph = new Graph(mainVertex);
    //newGraph -> mainVertex = mainVertex;
    this -> setGnumberVertex(1);
    newGraph -> numberVertex = CGraph::GnumberVertex;
    if(!head)
    {
        newGraph -> nextMainVertex = NULL; 
        tail = newGraph;
    }
    else
    {
        newGraph -> nextMainVertex = head;
        head -> prevMainVertex = newGraph;
    }
 
    newGraph -> prevMainVertex = NULL;
    head = newGraph;
}
 
void CGraph::addAdjacentVertex (int mainVertex, int adjacentVertex)
{
    Graph *graph = head;
    for(int iter = 1; iter<= CGraph::GnumberVertex; iter++){
        if(graph -> mainVertex == mainVertex)
        {
            graph -> adjacentVertexEl = new Graph::adjacentVertex(adjacentVertex);
    //Graph::adjacentVertex *newAdjacentVertex = new Graph::adjacentVertex(adjacentVertex);
            //graph -> adjacentVertexEl -> Vertex = adjacentVertex;
            if(!ahead)
            {
                graph -> adjacentVertexEl -> nextAdjacentVertex = NULL; 
                atail = graph -> adjacentVertexEl;
            }
            else
            {
                graph -> adjacentVertexEl -> nextAdjacentVertex = ahead;
                ahead -> prevtAdjacentVertex = graph -> adjacentVertexEl;
            }
 
            graph -> adjacentVertexEl -> prevtAdjacentVertex = NULL;
            ahead = graph -> adjacentVertexEl;
        }
        graph = graph -> nextMainVertex;
    }
}
 
void CGraph::printGraph()
{
 Graph *graph = head;
 while(graph)
 {
     graph -> adjacentVertexEl = ahead;
     std::cout<<graph -> mainVertex<<" : ";
 
     while(graph -> adjacentVertexEl)
     {
          std::cout<<graph -> adjacentVertexEl -> Vertex<<" ";
          graph -> adjacentVertexEl = graph -> adjacentVertexEl -> nextAdjacentVertex;
     }
 
     graph = graph -> nextMainVertex;
     std::cout<<std::endl;
 }
}
 
//int CGraph::getNumberVertex (int vertex)
//{
//  Graph *graph = head;
//  while(graph){
//      if(graph -> mainVertex == vertex)
//      {
//          return graph -> numberVertex;
//      }
//  }
//  return 0;
//}
 
void CGraph::setGnumberVertex(int GnumberVertex)
{
    CGraph::GnumberVertex += GnumberVertex;
}
 
void CGraph::setNullGnumberVertex(int GnumberVertex = 0)
{
    CGraph::GnumberVertex = GnumberVertex;
}
 
int CGraph::getGnumberVertex()
{
    return CGraph::GnumberVertex;
}
И main функция

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// componentGraph.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "structGraph.h"
#include <iostream>
 
void main()
{
    CGraph tx;
    tx.addMainVertex(5);
    tx.addAdjacentVertex(5,4);
    tx.addMainVertex(2);
    tx.addAdjacentVertex(2,8);
    tx.addMainVertex(3);
    tx.addAdjacentVertex(3,9);
 
    std::cout<<tx.getGnumberVertex();
    std::cout<<std::endl;
    tx.printGraph();
 
    //return 0;
}
Функцией addMainVertex я добавляю вершину в граф.
addAdjacentVertex - я добавляю к вершине - смежную вершину 1ый параметр сама вершина 2 - смежная
printGraph - распечатывает и в ней как раз таки ошибка, а может где - то раньше, но я предполагаю что именно тут. При распечатке выдает:
3: 9 8 4
2: 9 8 4
5: 9 8 4

а должно вот так :
3: 9
2: 8
5: 4

За ранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.