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

Односвязный линейный список - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Текстовые файлы http://www.cyberforum.ru/cpp-beginners/thread320756.html
Задание: Дана строка S, состоящая из 10 цифр, и файл с русским текстом. Зашифровать файл, выполнив циклическую замену каждой русской буквы, стоящей на K-й позиции строки, на букву того же регистра, расположенную в алфавите на SK-м месте после шифруемой буквы (для K = 11 снова используется смещение S1 и т. д.). Букву «ё» в алфавите не учитывать, знаки препинания и пробелы не изменять. ...
C++ Code::Blocks В Code::Blocks когда ты откомпилил программу в Debug, после внес изменения и снова "откомпилил", то нет результата от 2-й компиляции - программа работает так же, как и в первый раз, даже если вносишь капитальные изменения или вовсе стираешь всю ту программу и пишешь новую. Говорят, что надо очищать проект перед вторичной компиляцией. Для этого я нажимаю правой кнопкой на проекте, в контекстном... http://www.cyberforum.ru/cpp-beginners/thread320754.html
C++ База данных библиотеки
всем здравствуйте. у меня появилась проблема. нужно написать программу. вот задание: Написать программу , которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах содержат: Номер УДК; Фамилию и инициалы автора; Название; Год издания; Количество экземпляров данной книги в библиотеке. Программа должна обеспечивать:  Начальное формирование данных о всех книгах в...
C++ почему прога не пашет?
/*Цель программы: Вычислить минимум F(x)=k*(a*x+b)*P(x) на отрезке с точностью eps P(x) - интерполяционный многочлен от f(x) ф-ия f(x) задана таблично: x 1.05 1.15 1.25 1.35
C++ Исправление программы http://www.cyberforum.ru/cpp-beginners/thread320722.html
Простите мне что я такой неуч. Мне написали программу, но с некоторым отличием от того что я знаю: строчки scanf и prrintf такого вида для мня совсем непонятны. Вот сама программа:#include <stdio.h> #include <conio.h> #include <iostream.h> const n = 30; // максимальное количество элементов в списке int main() { clrscr(); // очищаем экран
C++ operator = для объекта, содержащего CStdioFile Приветствую всех. Возникла проблема с реализацией оператора присваивания для класса, содержащего CStdioFile. Получить копию CStdioFile мне не удалось... метод Duplicate() в нем не реализован почему-то. Попробовал вместо CStdioFile хранить ссылку, но тогда после копирования, когда удаляется временный объект вызывается деструктор, который благополучно закрывает файл по ссылке. Подскажите,... подробнее

Показать сообщение отдельно
Ruu
13 / 13 / 1
Регистрация: 20.07.2010
Сообщений: 43
16.06.2011, 14:05
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
#include <stdio.h>
#include <stdlib.h>
 
struct node {
    struct node * next;
    int data;
};
struct list {
    struct node * head;
};
 
void push_front(struct list *l, int value){
    struct node * node;
    
    node = (struct node*)malloc(sizeof(*node));
    
    if(l->head != NULL){
        node->next = l->head;
        l->head = node;
    }
    else{
        l->head = node;
    }
    l->head->data = value;
}
void push_back(struct list *l, int value){
    struct node * node;
    struct node * tail;
    
    node = (struct node*)malloc(sizeof(*node));
    
    if(l->head != NULL){
        tail = l->head;
        while(tail->next != NULL)
            tail = tail->next;
        tail->next = node;
        node->next = NULL;
        node->data = value;
    }
    else{
        node->data = value;
        l->head = node;
    }
}
 
void pop_front(struct list *l){
    struct node * node;
    
    if(l->head != NULL){
        node = l->head;
        l->head = node->next;
        free(node);
    }
}
void pop_back(struct list *l){
    struct node * prev;
    struct node * tail;
    
    if(l->head != NULL){
        prev = l->head;
        tail = l->head;
        while(tail->next != NULL){
            prev = tail;
            tail = tail->next;
        }
        if(l->head->next == NULL){
            l->head = NULL;
            free(l->head);
            return;
        }
        prev->next = NULL;
        free(tail);
    }
}
int front(struct list *l){
 
    if(l->head != NULL){
        return l->head->data;
    }
    else{
        return 0;
    }   
}
int back(struct list *l){
    struct node * prev;
    struct node * tail;
    
    if(l->head != NULL){
        tail = l->head;
        while(tail->next != NULL){
            prev = tail;
            tail = tail->next;
        }
        return tail->data;
    }
    else{
        return 0;
    }   
}
 
void insert(struct list *l, int position, int value){
    struct node *cur;
    struct node * newnode;
    struct node * node;
    int i=0;
    
    newnode = (struct node*)malloc(sizeof(*node));
 
    if(l->head != NULL && position > 0){
        cur = l->head;
        node = l->head;
        for(i=0;i<(position-1);++i,cur = cur->next,node = node->next);
        node = node->next;
        newnode->next = node;
        cur->next = newnode;
        
    }
    else{
        newnode->next = l->head;
        l->head = newnode;
    }
    newnode->data = value;
}
void erase(struct list *l, int position){
    struct node *cur;
    struct node * node;
    struct node * prev;
    int i=0;
    
    if(l->head == NULL) return;
    if(l->head != NULL && position > 1){
        cur = l->head;
        prev = l->head;
        for(i=0;i<(position-2);++i,cur = cur->next,prev = prev->next);
        prev = prev->next;
        node = prev->next;
        free(prev);
        cur->next = node;
    }
    else{
        prev = l->head;
        l->head = l->head->next;
        free(prev);
    }
}
void exchange(struct list *l, int first_elem, int second_elem){
    struct node * prev_first = NULL;
    struct node * prev_second =NULL;
    struct node * first = NULL;
    struct node * second = NULL;
    struct node * after_first = NULL;
    struct node * after_second = NULL;
    int i=0;
    
    if(l->head == NULL || l->head->next == NULL) return;
    if(l->head != NULL && first_elem > 0 && second_elem > 0){
        prev_first = l->head;
        for(i=0;i<(first_elem-2);++i,prev_first = prev_first->next);
        first = prev_first->next;
        after_first = first->next;
        
        prev_second = l->head;
        for(i=0;i<(second_elem-2);++i,prev_second = prev_second->next);
        second = prev_second->next;
        after_second = second->next;
        if(first_elem > 1) {
            first->next = after_second;
            prev_first->next = second;      
        }
        else {
            after_first = first;
            first = prev_first;
            first->next = after_second;
            l->head = second;
        }
        if(second_elem-first_elem > 1 || first_elem-second_elem > 1) {
            prev_second->next = first;
            second->next = after_first;
        }
        else
            second->next = first;       
    }
    else{
 
    }
    
}
 
int main() {
    struct list l;
    int i;
    
    for(i=0;i<12;++i)
        push_front(&l, i+1);
    for(i=0;i<12;++i){
        //printf("%d ", back(&l));
        //pop_back(&l);
    }
    printf("\n");
    //insert(&l,3,1);
    //erase(&l,12);
    exchange(&l,1,2);
    for(i=0;i<19;++i){
        printf("%d ", back(&l));
        pop_back(&l);
    }
    return 0;
}
В main() примеры пользования списком) Я его тестировал так)) Не фонтан конечно тесты но помоему и так понятно как юзать функции)

З.Ы. тут реализованы функции:
"положить в начало списка", "положить в конец списка", "достать из начала списка", "достать из конца списка", "Удалить улез из начала списка", "удалить узел из конца списка", "Вставка в любое место списка", "удаление любого элемента списка", "Поменять элементы местами"
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru