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

Простейший список - C++

Восстановить пароль Регистрация
 
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
16.03.2013, 02:07     Простейший список #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
#include <stdio.h>
#include <stdlib.h>
 
struct list
{
    long long numb;
    struct list *next;
} *head, *temp;
int main()
{
    int i;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=1;
    head->next=temp;
    temp=head;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=2;
    head->next=temp;
    temp=head;
 
    printf("%lld\n", head->numb);
    
    head=head->next;
    printf("%lld\n", head->numb);
 
    
    getchar();
    return 1;
}
Не понятно, почему выводится в обратном порядке (сначала 2 потом 1). Также я читал, что последнему элементу, который ни на что не ссылется нужно присваивать NULL т.е. head->next=NULL;, но так не компилируется. Кому не сложно, приведите пример простейшей программы со списками. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2013, 02:07     Простейший список
Посмотрите здесь:

Простейший счетчик C++
Простейший калькулятор C++
C++ Простейший класс
C++ простейший калькулятор
Простейший код C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
16.03.2013, 02:12     Простейший список #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
// Структура – элемент списка
struct Item {
int info;
Item* next;
};
 
void main ( )
{
Item *first = 0; //Указатель на начало списка
Item *p;
int i;
// Создать список
for (;;) {
// Вводить числа, пока не введем 0
сin » i;
if (!i) break;
 
// Создать новый элемент списка
р = new Item;
p->info = i;
 
// Присоединить новый элемент к началу списка
p->next = first ;
first = р;
}
 
// Пройти список и вывести элементы
р = first;
while (p) {
cout « p->info « ” ” ;
р = p->next;
}
 
// Пройти список и удалить элементы
while (first) {
р = first;
first = first->next ;
delete p;
}
}
Добавлено через 54 секунды
в гугле поищи
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
16.03.2013, 03:48     Простейший список #3
Цитата Сообщение от generation472 Посмотреть сообщение
cout «
Это что?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
16.03.2013, 04:12     Простейший список #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
#include <iostream>
 
struct list
{
    int key;
    list *next;
};
 
int main()
{
    list *head = 0, *pl;
    int x;
    // заполняем список
    for (int i=0; i < 10; i++)
    {
        std::cin >> x; // считываем в переменную x
        pl = new list; // выделяем память
        pl->key = x;
        pl->next = head;
        head = pl;
    }
 
    // движемся с конца к началу
    while (head)
    {
        pl = head;
        std::cout << pl->key << " "; // выводим на экран
        head = head->next ;
        delete pl; // освобождаем память
    }
}
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
16.03.2013, 11:43  [ТС]     Простейший список #5
Знаю, что не совсем в нужный раздел пишу, но если вам не сложно, не могли бы вы написать тот же код для СИ?

Добавлено через 27 минут
Всем спасибо, вроде разобрался. Но есть 2 вопроса. Почему при объявлении последнего элемента (в моем случае второго) head->next=temp;, а по идее должен быть равен NULL. И еще не могу понять почему выводит в обратном порядке?
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
#include <stdio.h>
#include <stdlib.h>
 
struct list
{
    long long numb;
    struct list *next;
} ;
 
int main()
{
    int i;
    struct list* temp=0;
    struct list* head;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=1;
    head->next=temp;
    temp=head;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=2;
    head->next=temp; //вот почему тут не NULL???
    temp=head;
 
    head=temp;
    while(head!=0)
    {
        printf("%lld\n", head->numb);
        head=head->next;
    }
    
 
    
    getchar();
    return 1;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
17.03.2013, 02:22     Простейший список #6
Тот же код на С
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
#include <stdio.h>
#include <stdlib.h>
 
struct list
{
    int key;
    struct list *next;
};
 
int main()
{
    struct list *head = NULL, *pl = NULL;
    int x, i;
    /* Г§Г*ïîëГ*ГїГҐГ¬ ñïèñîê */
    for (i=0; i < 3; i++)
    {
        scanf("%d", &x); /* ñ÷èòûâГ*ГҐГ¬ Гў ïåðåìåГ*Г*ГіГѕ x */
        pl = malloc(sizeof(struct list)); /* âûäåëÿåì ГЇГ*ìÿòü */
        pl->key = x;
        pl->next = head;
        head = pl;
    }
 
    /* äâèæåìñÿ Г± ГЄГ®Г*Г¶Г* ГЄ Г*Г*Г·Г*ëó */
    while (head)
    {
        pl = head;
        printf("%d ", pl->key); /* âûâîäèì Г*Г* ГЅГЄГ°Г*Г* */
        head = head->next;
        free (pl); /* îñâîáîæäГ*ГҐГ¬ ГЇГ*ìÿòü */
    }
    return 0;
}
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
17.03.2013, 02:41  [ТС]     Простейший список #7
MrGluck, спасибо разобрался. Только не могу понять как сделать, чтобы выводилось в нормальном порядке?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,404
17.03.2013, 02:45     Простейший список #8
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
#include <stdio.h>
#include <stdlib.h>
#define N 3
 
struct list
{
    int key;
    struct list *next;
};
 
int main()
{
    struct list *head = NULL, *pl = NULL;
    int i, arr[N];
    /* Г§Г*ïîëГ*ГїГҐГ¬ Г¬Г*Г±Г±ГЁГў */
    for (i= N-1; i >= 0; i--)
        scanf("%d", &arr[i]);
        
    /* Г§Г*ïîëГ*ГїГҐГ¬ ñïèñîê */
    for (i=0; i < N; i++)
    {
        pl = malloc(sizeof(struct list)); /* âûäåëÿåì ГЇГ*ìÿòü */
        pl->key = arr[i];
        pl->next = head;
        head = pl;
    }
 
    /* äâèæåìñÿ Г± ГЄГ®Г*Г¶Г* ГЄ Г*Г*Г·Г*ëó */
    while (head)
    {
        pl = head;
        printf("%d ", pl->key); /* âûâîäèì Г*Г* ГЅГЄГ°Г*Г* */
        head = head->next;
        free (pl); /* îñâîáîæäГ*ГҐГ¬ ГЇГ*ìÿòü */
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 17:34     Простейший список
Еще ссылки по теме:

C++ Написать простейший калькулятор
Простейший калькулятор C++
C++ Простейший калькулятор

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

Или воспользуйтесь поиском по форуму:
BumerangSP
17.03.2013, 17:34     Простейший список
  #9
 Комментарий модератора 
Дублирование тем запрещено. Закрыто.
Yandex
Объявления
17.03.2013, 17:34     Простейший список
Закрытая тема Создать тему
Опции темы

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