Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Northex
0 / 0 / 2
Регистрация: 14.12.2010
Сообщений: 14
#1

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

26.11.2011, 16:01. Просмотров 725. Ответов 2
Метки нет (Все метки)

Всем привет.
тут такая проблема есть у меня программа создание двусвязного циклического списка и действия над ним. и надо создать арифметику т.е сложить два списка вычесть и сравнить.
проблема в следуйщем
при создании функции для допустим сложение нужна ссылка на голову второго списка ( я хочу складывать не сами элементы а путем слияния).

вот примерная функция
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

http://www.cyberforum.ru/cpp-beginners/thread1646649.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 16:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Арифметика Класса Двусвязного списка (C++):

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка
Здравствуйте! Возникла проблема с программой. Тема: &quot;Сортировка двусвязного...

Элемент двусвязного списка содержит указатель на строку. Вставить строку в конец списка
Элемент двусвязного списка содержит указатель на строку. Вставить строку в...

Создание двусвязного списка
Не понимаю как его создать. И как сделать стандартные операции над...

Cортировка двусвязного списка
Ну, в общем задание в названии. Нужно отсортировать двусвязный список, методом...

Реверс двусвязного списка
Столкнулся с задачей написать функцию реверса двусвязного списка. Часа 3 сушил...

2
Сыроежка
Заблокирован
26.11.2011, 16:13 #2
Northex,

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

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

Добавлено через 19 часов 33 минуты
Народ помогите кто нить
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 11:54
Привет! Вот еще темы с решениями:

Итератор двусвязного списка
Добрый день. Проблема: Есть итератор для двусвязного списка. Реализован метод...

Удаление элемента из двусвязного списка
Надо удалить элемент из двусвязного списка, если выполняется условие...

Функция удаления из двусвязного списка
Создал двусвязный список на основе класса, работают ввод элементов в список и...

Удаление структуры из двусвязного списка
Доброго времени суток! Пытаюсь создать функцию удаления из списка структуры,...


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

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

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