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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MrGluck
Модератор
Эксперт CЭксперт С++
6988 / 4159 / 592
Регистрация: 29.11.2010
Сообщений: 11,039
#1

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

16.04.2011, 20:20. Просмотров 943. Ответов 2
Метки нет (Все метки)

Помогите пожалуйста. Пытаюсь понять устройство линейных списков. Столкнулся с проблемой обхода списка и его вывода на экран. Как "научить" программу ориентироваться с 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++
Разработать программу, которая создает список, элементами которого являются целые числа. Для заданных чисел a,b, выводит в порядке...

Работа со списками - C++
Дан список из n целых чисел a1, a2,. . .,an. Последовательно переместить все отрицательные элементы списка в его начало, а все...

Работа со списками - C++
Помогите пожалуйста с лабораторной работой: &quot;Файл содержит следующую информацию (построчно): фамилия, имя, отчество. Считать файл в...

Работа со списками - C++
Работа со списками(обьеденение, добавление и т.п.), при запуске выбивает такие ошибки. :-| С++, Builder 6 ...

Работа со списками - C++
Помогите решить задание. Описати функцію, яка друкує у зворотному порядку значення елементів списку. Тип даних - double


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
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     Работа с линейными списками
Ответ Создать тему
Опции темы

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