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

Списки - C++

Восстановить пароль Регистрация
 
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
25.10.2011, 21:57     Списки #1
Здравствуйте!
Помогите пожалуйста с программой....
Надо вывести список поездов , а потом вывести поезда которые отправляются в определенное время(к примеру: надо вывести поезда которые отправляются в 20.00) .
Заранее спасибо.


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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
// Lab3_9999.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string.h>
 
 
using namespace std;
 
const  int str_size = 256;
 
struct nodes{
        char station[str_size];
        double time;
        double distance;
        int number;
        nodes* next;
};
 
class my_list{
        public:
                void insert(char* str); //Вставляет запись за текущей.
                void insert1(double* distim);
                void insert2(int* num);
                void del_next();                //Удаляет запись за текущей.
                void go_next();                 //Переходит к следующей записи.
                void go_first();                //Переходит к первой записи.
                const char* show();             //возвращает указатель на хранимые данные.
                int  size();                    //Возвращает количество элементов в списке.
                void screen();
 
                my_list();
                ~my_list();
        private:
                nodes*  head;                   //начало списка.
                nodes*  position;               //активная (текущая) запись.
                int     count;                  //количество элементов списка.
                
                void free();                    //удаляет все элементы, освобождает память
};
 
 
 
my_list::my_list(){
        head = NULL;
        count = 0;
        go_first();
}
 
my_list::~my_list(){
        free();
}
 
//public:
 
void my_list::insert(char* str){
//Вставляет запись за текущей.
        nodes* new_node = new nodes;
        strcpy(new_node->station,str);
        if(position != NULL){
                new_node->next = position->next;
                position->next = new_node;
        }else{
                new_node->next = new_node;
                position = head = new_node;
        }
        count++;
}
 
void my_list::insert1(double* distim){
//Вставляет запись за текущей.
        nodes* new_node = new nodes;
        new_node->time;
        new_node->distance;
        if(position != NULL){
                new_node->next = position->next;
                position->next = new_node;
        }else{
                new_node->next = new_node;
                position = head = new_node;
        }
        count++;
}
 
 
 
void my_list::insert2(int* num){
//Вставляет запись за текущей.
        nodes* new_node = new nodes;
        new_node->number;
        if(position != NULL){
                new_node->next = position->next;
                position->next = new_node;
        }else{
                new_node->next = new_node;
                position = head = new_node;
        }
        count++;
}
 
void my_list::del_next(){
//Удаляет запись за текущей.
        if (position != NULL){
                nodes* tmp = position->next;
                position->next = position->next->next;
                
                        if(tmp == head) head = tmp->next;
                delete tmp;
        }
        count--;
}
 
void my_list::go_next(){
//Переходит к следующей записи.
        if (position != NULL)
                position = position->next;
}
 
void my_list::go_first(){
//Переходит к первой записи.
        position = head;
}
 
const char* my_list::show(){
//возвращает указатель на хранимые данные.
        if(position != NULL)
                return position->station;
        else
                return NULL;
}
 
void my_list::screen()
{
    if(position != NULL)
        cout << position->number << "  " << position->time << " " << position->distance << endl;
    else
        cout << NULL << endl;
}
 
int my_list::size(){
//Возвращает количество элементов в списке.
        return count;
}
 
// private:
 
void my_list::free(){
//удаляет все элементы, освобождает память
        go_first();
        while(head->next != head) del_next();
        del_next(); 
}
 
 
 
 
 
 
int main()
{
        char name1[] = "Kiev";
        char name2[] = "Odessa";
        char name3[] = "Zaporojie";
        char name4[] = "Moskva";
        int number1[] = {5};
        int number2[] = {10};
        int number3[] = {20};
        int number4[] = {100};
        double time1 = 15.50;
        double time2 = 15.50;
        double time3 = 10.00;
        double time4 = 20.00;
        double dist1 = 150.00;
        double dist2 = 200.00;
        double dist3 = 250.00;
        double dist4 = 300.00;
        //создание списка студентов:
        my_list student_list;
        
    //добавляем записи в список.
        student_list.insert(name1); student_list.insert2(number1);
        student_list.insert(name2); student_list.insert2(number2);
        student_list.insert(name3); student_list.insert2(number3);
        student_list.insert(name4); student_list.insert2(number4);
 
        //вывод списка на консоль:
        student_list.go_first();
        for(int i = 1;i<=student_list.size();i++){
                std::cout<<student_list.show()<<std::endl;
                student_list.go_next();
        }
 
        //удаление первого элемента из трех:
        student_list.go_first();
        student_list.go_next();
        student_list.go_next();
        student_list.del_next();
        
        //вывод отредактированного списка на консоль:
        student_list.go_first();        
        for(int i = 1;i<=student_list.size();i++){
                std::cout<<student_list.show()<<std::endl;
                student_list.go_next();
        }
        
    system("pause");
    return 0;
}
[IMG]http://s017.***********/i437/1110/a2/f80ed06d117e.jpg[/IMG]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 21:57     Списки
Посмотрите здесь:

C++ C++ списки
C++ Списки в С++
C++ Добавление и удаление элементов в середину списка
Списки C++
C++ списки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
26.10.2011, 02:59     Списки #2
Я извиняюсь, а не проще ли и список, и ваши поезда запихнуть в один класс?
Т.е. что-то типа такого...
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
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <string>
 
using namespace std;
 
class poezd
{
    string name;
    int distance;
    double time_c;
    static int count;
public:
    poezd(const string &, int, double);
    void show();
    void addlist();
    static void find(int);
    static void showlist();
    static int getcount(){return count;}
    static poezd *head;
    poezd *next;
 
};
 
poezd::poezd(const string &o,int d, double t)
{
    name = o;
    distance = d;
    time_c = t;
    count ++;
}
 
 
void poezd::addlist()
{
if (!head) 
{
    head = this;
    this->next = NULL;
}
else
{
poezd * q=head;
 
if (q->next==NULL)
{
q->next=this;
this->next=NULL;
}
else
{
while (q->next!=NULL)
{
q=q->next;
};
q->next=this;
this->next=NULL;
};
}
}
 
void poezd::showlist()
{
    poezd *p = head;
    while(p!=NULL)
    {
        cout<<"Station: "<<p->name<<endl;
        cout<<"Distance: "<<p->distance<<endl;
        cout<<"Time: "<<p->time_c<<endl;
        cout<<endl;
        p = p->next;
 
    }
}
 
void poezd::find(int t)
{
    poezd *p = head;
    while(p!=NULL)
    {
        if(t<p->time_c)
        {
        cout<<"Station: "<<p->name<<endl;
        cout<<"Distance: "<<p->distance<<endl;
        cout<<"Time: "<<p->time_c<<endl;
        cout<<endl;
        }
        p = p->next;
 
    }
}
 
poezd *poezd::head = NULL;
int poezd::count = 0;
 
 
int main()
{
    
    poezd b("Varkuta",100500,20.00);
    poezd c("Moskva",12323,19.54);
    poezd d("Poland",123444,13.12);
    b.addlist();
    c.addlist();
    d.addlist();
    poezd::showlist();
    cout<<endl;
    cout<<poezd::getcount();
    cout<<endl;
    poezd::find(14.00);
    system("pause");
    return 0;
}
Или обязательно так как у Вас?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.10.2011, 10:19     Списки #3
Sick2, не проще. это не грамотно. список есть список. это АТД. а поезд вполне конкретная сущность, которая не является списком. Оба кода конечно не грамотные. Но ваш неграмотен еще и в том, что список это сущность, которая должна состоять из узлов, а не как у вас.
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
26.10.2011, 14:46  [ТС]     Списки #4
спасибо огромное )

я первый раз делал иначе

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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Lab3_Pravilnya.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
 
template <class Station, class Number, class Time, class Distance> class List
{
    struct Element
    {
        Station station;
        Time time;
        Distance distance;
        Number number;
        Element *next;        // указатель на следующий элемент списка
    };
 
    Element *pHead;           // указатель на первый элемент списка
    Element *pPrev;           // указатель на последний элемент списка
    int countElem;            // количество элементов в списке
 
  public:
  /*void best(List list)
  {
       if(list[0]->staff > list[1]->staff)
        cout << "The best is " << list[0]->name << endl;
  else cout << "The best is " << list[1]->name << endl;
  }*/
      void del(List){
//Удаляет запись за текущей.
         Element *temp=pHead;
double n = 15.50;
while(temp)
{
if (time == 15.50)
cout << " Time is " << time << endl;
else
cout << "Error" << endl;
 
temp=temp->next;
}
        countElem--;
}
 
    List(int)
    {
        pHead = NULL;
        pPrev = NULL;
        countElem = 0;
    }
 
    ~List()
    {
        while(pHead != NULL)
        {
            Element *pTemp = pHead;
            pHead = pHead->next;
            delete pTemp;
        }
    }
 
 
    void  add_front(Station station, Number number, Time time, Distance distance)
    {
        Element *temp = new Element;
        temp->next = pHead;
        pHead = temp;
        if(pPrev == NULL)
            pPrev = pHead;
        pHead->station = station;
        pHead->number = number;
        pHead->time = time;
        pHead->distance = distance;
        ++countElem;
    }
 
    void add_back(Station station, Number number, Time time, Distance distance)
    {
        Element *temp = new Element;
 
        if(pHead == NULL)
            pHead = temp;
        else
            pPrev->next = temp;
 
        temp->station = station;
        temp->next = NULL;
        pPrev = temp;
        countElem++;
    }
 
    void print()
    {
        Element *pTemp = pHead;
 
        while(pTemp != NULL)
        {
            cout << pTemp->station << ' ' << pTemp->number << ' ' << pTemp->time << ' ' << pTemp->distance << endl;
            pTemp = pTemp->next;
        }
 
 
    }
 
 
    bool IsEmpty()
    {
        if(countElem == 0)
            return true;
        else
            return false;
    }
 
};
 
int main(int argc, char* argv[])
{
     List <char*, int, double, double> list(4);
     list.add_front("Kiev", 5, 15.50, 150.5 );
     list.add_front("Odessa", 10, 15.50, 350.50 );
     list.add_front("Harkov", 100, 16.40, 500.00);
     list.add_front("Moskva", 200, 12.30, 1200.00);
     list.add_front("Zaporojie", 300, 17.40, 200.00);
     list.del();
     list.print();
     //list.best(list);
 
 
     system("pause");
    return 0;
}
Yandex
Объявления
26.10.2011, 14:46     Списки
Ответ Создать тему
Опции темы

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