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

Двунаправленный кольцевой список (удаление узлов) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить количество знаков препинания в тексте http://www.cyberforum.ru/cpp-beginners/thread863538.html
Дан текст. Определить, сколько символов знаков препинания в нем (точка, запятая, двоеточие, тире, и пр.).
C++ Определить количество букв в предложении Дано предложение. Определить, сколько раз встречается буква let в данном предложении (let задается с клавиатуры). http://www.cyberforum.ru/cpp-beginners/thread863536.html
Посчитать количество символов в слове C++
Дано название футбольной команды. Подсчитайте, сколько в нем символов.
Удаление списка C++
Программа добавляющая заявки на авиабилеты. Есть функции добавления и вывода всех заявок, помогите сделать удаление ВСЕХ заявок. //#include "stdafx.h" #include <cstdio> #include <conio.h> #include <clocale> #include <windows.h> #include <stdlib.h> #include <iostream>
C++ Слова с похожими буквами http://www.cyberforum.ru/cpp-beginners/thread863516.html
Как выводи слова, которые имеют разные буквы? То есть, допустим есть слова: афина, авто, ручка, мел. Как сделать так, чтобы алгоритм выводил слово, которое имеет уникальные буквы( в данном случае это - мел)?
C++ Ввод символов в массив Как ввести в массив 30 символов, которые будут вводить без пробелов и переносов строк, то есть строку вида: 123456789...n , нужно привести к виду: char mass mass={1}{2}{3}{4}{5}{6}{7}{8}{9}...{n} подробнее

Показать сообщение отдельно
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2013, 17:30     Двунаправленный кольцевой список (удаление узлов)
MarVaL,
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
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <stdio.h>
#include <string>
#include <queue>
#include <time.h>
#include <cmath>
 
using namespace std;
 
template <typename E>
class Tlist{
public:
    struct list{
        E inf;
        list * next;
        list * prev;
    };
    //----
    list * head;
    list * tail;
    list * cur;
    //----
    list * init_list(){ 
        return NULL;
    };
    //----
    E pop_front(){
        list * r = head;
        E k = head->inf;
        if (head->next == NULL)
            head = tail = NULL;
        else {
            head = head->next;
            head->prev = NULL;
        };
        delete r;
        return k;
    };
    //----
    E pop_back(){
        list * r = tail;
        E k = tail->inf;
        if (tail->prev == NULL)
            head = tail = NULL;
        else {
            tail = tail->prev;
            tail->next = NULL;
        };
        delete r;
        return k;
    };
    //----
    void push_back(E key){
        list * r = new list;
        r->next = NULL;
        r->prev = NULL;
        r->inf = key;
        if(!head){
            head = r;
            tail = head;
        } else {
            r->prev = tail; 
            tail->next = r;
            tail = r;
        }
        cur = head;
    };
    //----
    E EraseRight(int x){
        list * r = cur;
        for (int i = 0; i < x; i++){ 
            if (r != tail){
                r = r->next;
            } else {
                r = head;
            };
        };
        int c = r->inf;
        if (r == head) {
            cur = head->next;
            return pop_front();
        };
        if (r == tail) {
            cur = head;
            return pop_back();
        };
        if (r != head && r != tail) {
            cur = r->next;
            r->prev->next = r->next;
            r->next->prev = r->prev;
            delete r;
        };
        return c;
    };
    //----
    E EraseLeft(int x){
        list * r = cur;
        for (int i = 0; i < x; i++){ 
            if (r != head){
                r = r->prev;
            } else {
                r = tail;
            };
        };
        int c = r->inf;
        if (r == head) {
            cur = tail;
            return pop_front();
        };
        if (r == tail) {
            cur = tail->prev;
            return pop_back();
        };
        if (r != head && r != tail) {
            cur = r->prev;
            r->prev->next = r->next;
            r->next->prev = r->prev;
            delete r;
        };
        return c;
    };
    //----
    Tlist(){
        head = tail = init_list();
        cur = head;
    };
};
 
int main() {
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    Tlist <int> l;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        l.push_back(i+1);
    int t;
    for (int i = 0; i < n - 1; i++) {
        scanf("%d", &t);
        if (t > 0) {
            printf("%d\n", l.EraseRight(t));
        } else {
            printf("%d\n", l.EraseLeft(-t));
        }
    }
    printf("%d\n", l.pop_back());
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru