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

Работа с линейными списками - C++

Восстановить пароль Регистрация
 
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5583 / 3062 / 344
Регистрация: 29.11.2010
Сообщений: 8,254
16.04.2011, 20:20     Работа с линейными списками #1
Помогите пожалуйста. Пытаюсь понять устройство линейных списков. Столкнулся с проблемой обхода списка и его вывода на экран. Как "научить" программу ориентироваться с ptr->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
#include <iostream>
#include <conio.h>
#include <clocale>
#include <fstream>
using namespace std;
 
struct list
{
       struct list *next; // ГіГЄГ*Г§Г*òåëü Г*Г* ñëåä. ýëëåìåГ*ГІ Г±ГЇГЁГ±ГЄГ*
       struct list *prev; // ГіГЄГ*Г§Г*òåëü Г*Г* ïðåäûäóùèé ýëëåìåГ*ГІ Г±ГЇГЁГ±ГЄГ*
       int stip, zachetka, gruppa;
       string name;
};
list *head=0, *tail=0;
void input(list *ptr); // äîáГ*âëåГ*ГЁГҐ óçëГ* Г±ГЇГЁГ±ГЄГ*
void del(); // ГіГ¤Г*ëåГ*ГЁГҐ óçëГ* Г±ГЇГЁГ±ГЄГ*
void print(); // âûâîä Г*Г* ГЅГЄГ°Г*Г*
void poisk ();
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int choose;
    list* ptr = new list;
    ptr->next = 0;
    ptr->prev = 0;
    do
    {
        cout<<"Г—ГІГ® æåëГ*ГҐГІГҐ ñäåëГ*ГІГј:"<<endl
        <<"1. ÄîáГ*ГўГЁГІГј Г*îâûé ýëëåìåГ*ГІ"<<endl
        <<"2. ÏîêГ*Г§Г*ГІГј ñïèñîê"<<endl
        <<"Г‚Г*Гё âûáîð: ";
        cin>>choose;
        if (choose == 1)
            input(ptr);
        if (choose == 2)
        {
            list *ptr = 0; // Г*Г*Г·ГЁГ*Г*ГҐГ¬ Г± ãîëîâû
            if (head == 0)
                cout<<"Ñïèñîê ГЇГіГ±ГІ"<<endl;
            else
            {
                ptr = tail;
                cout<<endl<<"Г”Г*ìèëèÿ: "<< ptr->name<<endl;
                cout<<"ÃðóïïГ*: "<< ptr->gruppa<<endl;
                cout<<"Íîìåð ГЄГ*èæêè: "<< ptr->zachetka<<endl;
                cout<<"ÑòèïåГ*äèÿ: "<< ptr->stip<<endl<<endl;
                while (ptr->next!= 0)
                {
                     ptr=ptr->next; 
                     cout<<"Г”Г*ìèëèÿ: "<< ptr->name<<endl;
                     cout<<"ÃðóïïГ*: "<< ptr->gruppa<<endl;
                     cout<<"Íîìåð ГЄГ*èæêè: "<< ptr->zachetka<<endl;
                     cout<<"ÑòèïåГ*äèÿ: "<< ptr->stip<<endl<<endl;
                }
            }
        }
        cout<<"ÆåëГ*ГҐГІГҐ ïðîîäëæèòü? (y/n)"<<endl;
    } while (getch()!='n');
    return 0;
}
 
void input(list *ptr)
{
     if (head == 0)
         head = ptr;
     cout<<endl<<"Ââåäèòå ГґГ*ìèëèþ: ";
     cin>>ptr->name;
     cout<<"Ââåäèòå Г*îìåð ãðóïïû: ";
     cin>>ptr->gruppa;
     cout<<"Ââåäèòå Г*îìåð Г§Г*Г·ГҐГІГЄГЁ: ";
     cin>>ptr->zachetka;
     cout<<"Ââåäèòå Г±ГІГЁГЇГҐГ*äèþ: ";
     cin>>ptr->stip;
     tail = ptr;
     cout<<endl;
}
 
void print()
{
     list *ptr = 0; // Г*Г*Г·ГЁГ*Г*ГҐГ¬ Г± ãîëîâû
     if (head == 0)
         cout<<"Ñïèñîê ГЇГіГ±ГІ"<<endl;
     else
         while (ptr->next != 0)
         {
             cout<<"Г”Г*ìèëèÿ: "<< ptr->name<<endl;
             cout<<"ÃðóïïГ*: "<< ptr->gruppa<<endl;
             cout<<"Íîìåð ГЄГ*èæêè: "<< ptr->zachetka<<endl;
             cout<<"ÑòèïåГ*äèÿ: "<< ptr->stip<<endl<<endl;
             ptr = ptr->next;
         }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2011, 20:20     Работа с линейными списками
Посмотрите здесь:

Работа со списками C++
C++ Работа с линейными массивами. Заполнение и прохождение по массиву.
C++ Работа со списками
Работа со списками. C++
C++ Работа со списками
C++ Работа со списками
C++ Работа со списками
C++ Работа со списками
Работа со списками C++
C++ Работа со списками
Работа со списками C++
C++ Работа с линейными списками. Ошибка "getline: идентификатор не найден"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DexMipt
13 / 13 / 1
Регистрация: 13.03.2011
Сообщений: 98
16.04.2011, 20:34     Работа с линейными списками #2
если ты не против , я тебе скину си функцию вывода ,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
void s_print(struct num **ptr)
{
    struct num *current=NULL;
    current=*ptr;
    if (current==NULL)
        printf("It`s empty\n");
          else{
            while(current != NULL){               //выводим на печать связный список
                printf("%d ",current->digit);
                current  = current->next;
               }}
    printf("\n");
}
если структура у меня объявлена вот так struct num{
int digit;
struct num *next;
};
popov654
 Аватар для popov654
32 / 32 / 2
Регистрация: 09.04.2011
Сообщений: 114
16.04.2011, 21:43     Работа с линейными списками #3
1. У Вас как будто функция печати дублируется
2. Где связывание? Где-то же должна быть инструкция ptr->next = tail (хотя вообще говоря логичнее tail->next = ptr
О_о
Yandex
Объявления
16.04.2011, 21:43     Работа с линейными списками
Ответ Создать тему
Опции темы

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