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

Арифметика Класса Двусвязного списка - C++

Восстановить пароль Регистрация
 
Northex
0 / 0 / 0
Регистрация: 14.12.2010
Сообщений: 14
26.11.2011, 16:01     Арифметика Класса Двусвязного списка #1
Всем привет.
тут такая проблема есть у меня программа создание двусвязного циклического списка и действия над ним. и надо создать арифметику т.е сложить два списка вычесть и сравнить.
проблема в следуйщем
при создании функции для допустим сложение нужна ссылка на голову второго списка ( я хочу складывать не сами элементы а путем слияния).

вот примерная функция
void List::Summa (const List &a) //константная ссылка на 2 список (тут проблема вся)
{
Element *p=a.Head; // цепляемся за голову второго списка, и по ней бежим, рассматривая его элементы
while (p)
{
Push(p->data);
p=p->next;
}
}
Как можно сделать по другому или создать константный двусвязный циклический список?

вот сама программа
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
List.cpp
#include <iostream>
#include "List.h"
using namespace std;
//функции Реализация 
 
            int List:: push (double data)
            {
                if (!List::isEmpty())// если список еще пуст
                    {
                        Element *inserted;
                        inserted= new Element;
                        Head=inserted;
                        Car=inserted;
                        inserted->data=data;
                        inserted->next=inserted;
                        inserted->prev=inserted;
                        Koll_elem++;
                        return 1;
                    }
                    
                
                if (List::isEmpty() and List::Koll_elem==1)
                    {
                        Element *inserted;
                        inserted= new Element;
                        inserted->data=data;
                        Car->next=inserted;
                        inserted->prev=Car;
                        Car->prev=inserted;
                        inserted->next=Car;
                        Koll_elem++;   
                        Car=inserted;
                        return 1;
                    }
                else
                    {
                        Element *inserted;
                        inserted= new Element;
                        inserted->data=data;
                        
                        inserted->next=Car->next;
                        inserted->next->prev=inserted;
                        Car->next=inserted;
                        inserted->prev=Car;
                        Koll_elem++;   
                        Car=inserted;
                    }
                return 1;    
                }
            
            
            
            double List::pop ()
            {
                if (!List::isEmpty()) return 0.0;
                Element *temp=Car;
                if (List::isEmpty() and Koll_elem==1)
                    {
                        Head=NULL;
                        Car=NULL;
                        Koll_elem--;
                        tag=temp->data;
                        free (temp);
                        return tag;
                        
                    }
                else 
                    {
                        Car->next->prev=Car->prev;
                        Car->prev->next=Car->next;
                        Car=Car->prev;
                        Koll_elem--;
                        tag=temp->data;
                        free(temp);
                        return tag;
                    }
        
            }
            
            
            void List::loop()
                    {   
                        if (List::isEmpty()){
                            Element *tempCar=Head;
                        for (int i=0;i<Koll_elem;i++){ cout <<tempCar->data <<"\t"; tempCar=tempCar->next ; }
                                            
                                            }
                        else 
                            cout<< "List is pust\n";
                    }
            
            void List::clear()
                    {
                        for(int i=0;i<Koll_elem;) List::pop();
                    }
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
#include <conio.h>
#include <iostream>
#include "List.h"
using namespace std;
int main ()
 
{   int k;
    List *L= new List;
    double tmp;
    
    while(k!=7)
{system("cls");
        printf("\n1:-Input\n");
        printf("\n2:-Del\n");
        printf("\n3:-Next\n");
        printf("\n4:-Pred\n");
        printf("\n5:-Clear\n");
        printf("\n6:-Print\n");
        printf("\n7:-Exit\n");
        
        printf("\nLIST\n--------------------\n");
        L->loop();
        printf("\n--------------------\n");
        scanf("%d",&k);
        switch(k)
        {
            case 1 : cin >> tmp;
                     L->push(tmp);
                     break;
                     
           
                           
            }
     getch();       
    }
 
   // L->free();
    free(L);
    return 1;
    }
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
List.h
#ifndef _LIST
#define _LIST
    
 
 
    class List
        { 
          struct Element
                {
                      double data;
                      Element *next;
                      Element *prev;
                     };
                     
            Element *Head;
            Element *Car;
            int Koll_elem;
            double tag,o;
            
            public:
            //конструктор     
            List()               {Head      =NULL;    
                                  Car       =NULL;
                                  Koll_elem =0;
                                  tag       =0;     }
            //деструктор 
            ~List();
            //функции 
            int push (double data=0.0);
            double pop ();
            void loop();
            void clear();
            void next(){
                 
                 if (Head==NULL ){printf("\nSpisok pust press any key for exit\n");
                 getch();
                 exit(1) ;}
                 Car=Car->next;}   //переделать функцию чтобы проверка на пустоту
            void prev(){
                 if (Head==NULL ){printf("\nSpisok pust press any key for exit\n");
                 getch();
                 exit(1) ;}
                 Car=Car->prev;}
            int isEmpty(){if (Head==NULL )return 0; else return 1;}
            double el(){if(!isEmpty())return Car->data; else return 0.0;}
            };
#endif
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 16:01     Арифметика Класса Двусвязного списка
Посмотрите здесь:

Быстрая сортировка двусвязного списка C++
[C++] Перемещение элемента двусвязного списка C++
Cортировка двусвязного списка C++
Удаление элемента из двусвязного списка C++
Итератор двусвязного списка C++
C++ Удаление структуры из двусвязного списка
Матрица на основе двусвязного списка C++
Реверс двусвязного списка C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
26.11.2011, 16:13     Арифметика Класса Двусвязного списка #2
Northex,

Не понятно, в чем проблема? Вы можете русским языком сформулировать проблему?!
Northex
0 / 0 / 0
Регистрация: 14.12.2010
Сообщений: 14
27.11.2011, 11:54  [ТС]     Арифметика Класса Двусвязного списка #3
Цитата Сообщение от Сыроежка Посмотреть сообщение
Northex,

Не понятно, в чем проблема? Вы можете русским языком сформулировать проблему?!
Вот программу что я привел путем добавления создает двусвязный циклический список.
мне нужно написать функции которые буду складывать два списка сравнивать их и вычитать из одного списка другой, причем сделать их надо в виде именованных функций, сохраняющих результат в объекте «this»..
у меня возникла сложность с этим.
Я не знаю как написать эти функции.

Добавлено через 19 часов 33 минуты
Народ помогите кто нить
Yandex
Объявления
27.11.2011, 11:54     Арифметика Класса Двусвязного списка
Ответ Создать тему
Опции темы

Текущее время: 04:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru