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

Сдвиг элементов однонаправленного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ float обнуляет дробную часть http://www.cyberforum.ru/cpp-beginners/thread158806.html
Здравствуйте всем! Я новичок. Поиском не нашел ничего подобного. Проблема в следующем: В функцию myfunc по параметру приходит long переменная. Когда она внутри функции делится на 60 и...
C++ Русский компилятор C/С++ Подскажите компилятор C/C++ созданный в Росси. Ещё не разу невидел такого!:) Спасибо! http://www.cyberforum.ru/cpp-beginners/thread158743.html
C++ Пакетированные стандартные блоки - Вложенные стандартные блоки
Кто нибудь может объяснить на примере кода С, как это выглядит?
последовательность случайных чисел C++
Здравствуйте! Прошу прощения за возможно глупый вопрос) Проблема в том, что в программе #include <iostream> #include <math.h> #include <stdlib.h> #include <time.h> int main(){ t: ...
C++ вопрос по Страуструпу http://www.cyberforum.ru/cpp-beginners/thread158696.html
здраствуйте, вопрос тем кто читал Страуструп, там есть глава по названию "Калькулятор" там описан алгоритм который я до конца не понял, кто небуд может мне обяснить, или если есть код этой проги в...
C++ connect QT to NetBeans 6.9 не могу запустить скомпиленый файл.. когда он его запускает вылетает ошибка что не может найти файт QTCorer4.dll.. что делать? Прикрепляйте картинки к сообщениям. подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9682 / 5632 / 955
Регистрация: 25.07.2009
Сообщений: 10,809
12.08.2010, 19:02
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct tagNODE{
    int nData;
    struct tagNODE * pNext;
} node_t;
 
node_t * new_node(int data, node_t * last){
    node_t * n;
    if ( ( n = (node_t*)malloc(sizeof(node_t)) ) == NULL )
        return NULL;
    n->nData = data;
    n->pNext = NULL;
    if ( last )
        last->pNext = n;
    return n;
}
 
node_t * last_node(const node_t * n){
    if ( ! n )
        return NULL;
    while ( n->pNext )
        n = n->pNext;
    return (node_t*)n;
}
 
void print_nodes(const node_t * n){
    while ( n ){
        printf("%d ", n->nData);
        n = n->pNext;
    }
}
 
void clear_nodes(node_t * n){
    node_t * tmp;
    while ( n ){
        tmp = n->pNext;
        free(n);
        n = tmp;
    }
}
 
node_t * create_nodes(void){
    node_t * first, * last;
    char buf[BUFSIZ];
 
    printf("Input data - one value in row. When done just press enter.\n");
 
    first = last = NULL;
    while ( 1 ){
        printf("> ");
        if ( ! fgets(buf, BUFSIZ, stdin) ){
            perror("fgets");
            if ( first )
                clear_nodes(first);
            return NULL;
        }
        if ( *buf == '\n' )
            break;
        if ( ( last = new_node(atoi(buf), last) ) == NULL ){
            fprintf(stderr, "Error while getting node!\n");
            if ( first )
                clear_nodes(first);
            return NULL;
        }
        if ( ! first )
            first = last;
    }
    return first;
}
 
node_t * shift_nodes(node_t * first, int steps){
    node_t * last;
 
    if ( steps < 1 )
        return first;
    if ( ( last = last_node(first) ) == NULL ){
        fprintf(stderr, "Can't get last node!\n");
        return NULL;
    }
    last->pNext = first;
    while ( steps-- ){
        first = first->pNext;
        last = last->pNext;
    }
    last->pNext = NULL;
    return first;
}
 
int main(void){
    node_t * list;
    int shift;
 
    if ( ( list = create_nodes() ) == NULL ){
        fprintf(stderr, "Can't create nodes!\n");
        exit(EXIT_FAILURE);
    }
    printf("\nCurrent list: ");
    print_nodes(list);
    printf("\nSteps for right shift: ");
    if ( scanf("%d%*c", &shift) != 1 ){
        perror("scanf");
        clear_nodes(list);
        exit(EXIT_FAILURE);
    }
    if ( ( list = shift_nodes(list, shift) ) == NULL ){
        fprintf(stderr, "Error while shifting list!\n");
        exit(EXIT_FAILURE);
    }
    printf("Shifted list: ");
    print_nodes(list);
    printf("\n");
 
    clear_nodes(list);
    exit(EXIT_SUCCESS);
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru