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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 76, средняя оценка - 4.84
Nonick
0 / 0 / 0
Регистрация: 11.10.2009
Сообщений: 3
#1

Построение списка - C++

11.10.2009, 20:02. Просмотров 9558. Ответов 10
Метки нет (Все метки)

В интернете очень много инфы по поводу построения списка через класс "List" или подобных. Но как построить список не прибегая к классам?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2009, 20:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построение списка (C++):

Построение односвязного списка - C++
Имеется следующая функция считывающая структуру из файла и создающая односвязный список. Проблема в том, что если в файле > 1 э-та -...

Построение линейного самоадресуемого списка - C++
задание: Напишите программу создания линейного самоадресуемого списка из 10-и элементов. В поле данных каждого элемента списка – порядковый...

Написать код программы, выполняющей растяжку списка и вставку, удаление из списка и сжатие списка - C++
Люди ПОМОГИТЕ осталось совсем мало , мне нужна помощь!!! написать код программ: 1) Написать код программы, выполняющей растяжку...

Реализовать ведение списка забронированных и списка купленных билетов в кинозале кинотеатра - C++
Приветствую! работаю на Builder Borland c++ - программирую таблицы и кнопки такое задание : Реализовать ведение списка забронированных...

Списки. Функции добавление списка в конец и в середину другого списка. - C++
Всем привет!) Я вот написал две функции, 1- добавляется список2 в середину списка1, а 2 - добавляет список2 в конец списка1....когда я...

Проверка, пуст ли список, очистка списка, печать списка в направлении от верха к низу - C++
Доброго вечера. Пожалуйста помогите разобраться с заданием на структуры, и подскажите с чего здесь начинать? 1) Кольцевой...

10
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
11.10.2009, 20:11 #2
заново изобрести велосипед? тут на форуме он уже не раз изобреталься. и односвязный и двусвязный, попробуйте поиском с ключевым словом "список"
0
patriot2008
72 / 72 / 4
Регистрация: 04.12.2008
Сообщений: 463
11.10.2009, 21:13 #3
В двух словах, это класс с информационной частью и указателем на следующий элемент (если двусвязный, то еще и на предыдущий).
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
11.10.2009, 21:24 #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
135
136
137
138
139
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* First node of the list is not used to store actual values*/
/* Last node has "next" pointer equal to zero */
typedef struct _node { 
    int value;
    struct _node * next;
}Node,List;
/*Sets the end of list to it's start*/
void CreateList(List * list) {
    list->next=NULL;
};
void AddNode(List * list,int value) {
    Node * node;
    //if the end of list is found
    if(list->next==NULL) { 
        //insert to the end
        list->next = (Node*) malloc(sizeof( List));
        list->next->value=value;
        list->next->next=NULL;
        return;     
    };//end of looking up
 
    //if the right place is found
    if(list->next->value >= value)  {
        //insert there
        node = (Node*)malloc(sizeof( List));
        node->value = value;
        node->next = list->next;
        list->next = node;  
    } else //keep searching - call the same for next node.
        AddNode(list->next,value);
};
int DelNode(List * list,int value) { 
    Node * tmp;
    //if this is the end - quit.notging deleted.
    if(list->next==NULL) return 0;
    if(list->next->value==value) { 
        //deleted something.return true.
        tmp = list->next->next;
        free(list->next);
        list->next = tmp;
        return 1;//else keep searching
    } else return DelNode(list->next,value);
};
void PrintList(List * list) { //thats just simple.
    Node * tmp;
    if(list->next == NULL)  {
        printf("List is empty");
        return;
    }
    tmp = list->next;
    while(tmp !=NULL) { 
        printf("%d ",tmp->value);
        tmp=tmp->next;
    };
};
int CntList(List * list) { //even more simple
    int i = 0 ;
    Node * tmp = list;
    while(tmp->next != NULL) { 
        i++;
        tmp=tmp->next;
    };
    return i;
};
int OccList(List * list,int value ) { 
    if(list->next == NULL) return 0;
    if(list->next->value == value)
        return 1+OccList(list->next,value);
    if(list->next->value >value ) 
        return 0;
    return OccList(list->next,value);
};
int CdvList(List * list) { 
    if(list->next == NULL)
        return 0;
    if(list->next->next ==NULL) 
        return 1;
    if(list->next->value == list->next->next->value)
        return CdvList(list->next);
    else 
        return 1+CdvList(list->next);
};
int RanList(List * list,int value1, int value2) { 
    if(value1 >value2){
        printf("Invalid range\n");
            return -1;
    }
    if(list->next==NULL)
        return 0;
    if(list->next->value > value2 ) 
        return 0;
    if(list->next->value < value1 ) 
        return RanList(list->next,value1,value2);
    return RanList(list->next,value1,value2)+1;
};
int main () { 
    char command[4];
    int param1,param2,tmp;
    List list;
    CreateList(&list);
    while(1) { 
        printf("Enter command : ");
        scanf("%s",command);
        if(!strcmp(command,"pri") ) { 
            PrintList(&list);
            printf("\n");
        };
        if(!strcmp(command,"ins") ) { 
            scanf("%d",&param1);
            AddNode(&list,param1);
        };
        if(!strcmp(command,"del") ) { 
            scanf("%d",&param1);
            if(!DelNode(&list,param1))
                printf("There is no given value in the list\n");
        };
        if(!strcmp(command,"cnt") ) { 
            printf("Number of nodes : %d\n",CntList(&list));
        };
        if(!strcmp(command,"cdv") ) { 
            printf("Number of unique nodes: %d\n",CdvList(&list));
        };
        if(!strcmp(command,"occ") ) { 
            scanf("%d",&param1);
            printf("There are %d entries of %d in list\n",OccList(&list,param1),param1);
        };
        if(!strcmp(command,"ran") ) { 
            scanf("%d %d",&param1,&param2);
            if( (tmp = RanList(&list,param1,param2))>=0)
                printf("Number of nodes within selected range is %d\n",tmp);
        };
        if(!strcmp(command,"end") )  
            break;
    };
    return 0;
};
9
patriot2008
72 / 72 / 4
Регистрация: 04.12.2008
Сообщений: 463
11.10.2009, 21:28 #5
Класс, не только построение списка ,но и его обработка...
0
Жекас
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 3
18.11.2009, 03:52 #6
XuTPbIu_MuHTAu, помоги пожалуйста написать прогу:ввести фамилию ,кафедру,специальность,оценку студента.Отсортировать этих студентов по кафедрам,посчитать средний бал по кафедрам.Пожалуйста,если можешь,напиши!
0
Артур214
0 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 5
23.11.2009, 15:09 #7
С начала суток прошло N секунд (N-целое).Найти количество минут и секунд ,прошедших с начала последнего часа . помогите решить
0
Sayrus89
31 / 31 / 1
Регистрация: 26.10.2009
Сообщений: 98
09.12.2009, 02:40 #8
Цитата Сообщение от Артур214 Посмотреть сообщение
С начала суток прошло N секунд (N-целое).Найти количество минут и секунд ,прошедших с начала последнего часа . помогите решить
int минут = N%3600 / 60;
int секунд = N%3600 % 60;
0
CyberWind
0 / 0 / 0
Регистрация: 05.03.2010
Сообщений: 28
12.03.2010, 12:09 #9
Хех, по мне этот код ровня дрвенекитайсуой грамоте Правда я только начал изучение программирования, и метаюсь от С# до Ассемблера. Хотя когда-то изучал TurboPascal, но видно этого мало. Эм думаю это не в тему, но все же, на ваш взгляд, как лучше усваивается язык через книги или через копирование и разбирание когда по строчкам?
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 12:31 #10
Кому как... Лучший способ, это когда есть преподаватель, который все объяснит. По книгам учится сложнее. По примерам сложнее всего. Но я например в языке Python разобрался имея под рукой 3 программы - шарик отскакивающий от стенок экрана, змейка и пример с 3д графикой на OpenGl. Ушло порядка двух недель, после которых я уже мог писать неплохие программы с 3д.
0
vanomux
3 / 3 / 0
Регистрация: 08.02.2012
Сообщений: 17
27.06.2012, 17:50 #11
посмотри тут подробно описано http://algorithmlib.org/algoritm
1
27.06.2012, 17:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 17:50
Привет! Вот еще темы с ответами:

Привести пример реализации любого линейного списка списка с использованием лишь структур - C++
Буду благодарен, если кто-нибудь сможет привести пример реализации любого линейного списка списка с использованием лишь структур (то есть...

Получить указатель на элемент двунаправленного списка, добавить значение в начало списка и очистить его - C++
Нужно создать двунаправленный список //вроде так, но не уверен struct Double_List {//структура данных int Data;...

Удалить из списка все элементы с нечётными значениями и вывести указатель p2 на начало преобразованного списка. - C++
Здравствуйте. Не получается решить задачу. Условие. Дан непустой двусвязный список. Удалить из списка все элементы с нечётными ...

Дублирование вхождения каждого элемента списка One и формирование из этих значений списка Double (пояснить условие) - C++
Здравствуйте. Вот собственно само задание: В составе программы описать функцию, которая дублирует вхождение каждого элемента списка One и...


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

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

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