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

Теряется указатель на начало односвязного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реализовать функцию поиска по заданному полю в массиве структур (файловый ввод/вывод) http://www.cyberforum.ru/cpp-beginners/thread1669484.html
Имеется информация о клиентах телефонной компании и предоставляемых им услугах. Каждая услуга имеет собственный тариф, а каждый клиент может пользоваться произвольным набором услуг в течение...
C++ Перехватывающая Функция с доступом к статичным членам класса Возможно ли объявить, Функцию перехватчик таким образом чтобы она имела доступ к переменным класса. Оригинальная функция: void UStruct::Serialize( FArchive& Ar ) { Super::Serialize( Ar ); ... http://www.cyberforum.ru/cpp-beginners/thread1669454.html
C++ Адаптация куска кода, написанного по стандарту C++11, под стандарт C++03
есть код namespace cmd { inline auto get_size(const char *path) -> decltype( std::declval<struct dSTATE64>().st_size ) { struct dSTATE64 info; const auto re = dSTATE64(path,...
C++ Разложение ln(1-x) в ряд Тейлора
Здравствуйте! помогите написать функцию разложения в ряд Тейлора ln(1-x)
C++ Поиск приоритетных вершин графа http://www.cyberforum.ru/cpp-beginners/thread1669417.html
Помогите пожалуйста написать код для поиска приоритетных вершин графа (n), как на рисунке. Написал код, но он считает последовательно, а нужно параллельно, то есть может быть несколько одинаковых...
C++ Компилируется, но не выполняется программа Есть код, содержащий функцию сортировки выбором Все компилируется , однако при запуске выдает просто черную консоль, и ничего не происходит #include <iostream> #include <fstream> using namespace... подробнее

Показать сообщение отдельно
sSTUDENTUSs
-10 / 1 / 0
Регистрация: 05.10.2014
Сообщений: 26

Теряется указатель на начало односвязного списка - C++

24.02.2016, 09:32. Просмотров 154. Ответов 0
Метки (Все метки)

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
#include <stdio.h> 
#include <stdlib.h> 
#include <iostream>
#include <ctype.h>
 
typedef struct Node {
    struct Node* next;
    int value;
} Node;
typedef struct List {
    struct Node* head;
    int count;
} List;
 
List* CreateList() {
    List* list = (List*)malloc(sizeof(List));
    list->head = NULL;
    list->count = 0;
    return list;
}
 
 
void push(List** list, int data) {
    Node *tmp = (Node*)malloc(sizeof(Node));
    tmp->value = data;
    tmp->next = (*list)->head;
    (*list)->head = tmp;
    (*list)->count++;
}
 
 
int pop(List** list) {
    Node* prev = NULL;
    int val;
    if (((*list)->head) == NULL) {
        exit(-1);
    }
    prev = ((*list)->head);
    val = prev->value;
    ((*list)->head) = ((*list)->head)->next;
    free(prev);
    (*list)->count--;
    return val;
}
 
 
Node* getNth(List** list, int n) {
    int counter = 0;
    while (counter < n && (*list)->head) {
        (*list)->head = (*list)->head->next;
        counter++;
    }
    return (*list)->head;
}
 
 
void insert(List* list, unsigned n, int val) {
    unsigned i = 0;
    Node *tmp = NULL;
    while (i < n && list->head->next) {
        list->head = list->head->next;
        i++;
    }
    tmp = (Node*)malloc(sizeof(Node));
    tmp->value = val;
    if (list->head->next) {
        tmp->next = list->head->next;
    }
    else {
        tmp->next = NULL;
    }
    list->head->next = tmp;
    list->count++;
}
 
 
int deleteNth(List** list, int n) {
    if (n == 0) {
        return pop(&*list);
    }
    else {
        Node* prev = getNth(&*list, n - 1);
        Node* elm = prev->next;
        int val = elm->value;
 
        prev->next = elm->next;
        free(elm);
        return val;
    }
    (*list)->count--;
}
 
 
void deleteList(List** list) {
    while ((*list)->head->next) {
        pop(&*list);
        (*list)->head = (*list)->head->next;
    }
    free((*list)->head);
    (*list)-> count = 0;
}
 
 
void fromArray(List** list, int *arr, int size) {
    int i = size - 1;
    if (arr == NULL || size == 0) {
        return;
    }
    do {
        push(list, arr[i]);
    } while (i-- != 0);
}
 
 
void printLinkedList(List* list) {
    Node* tmp = list->head;
    while (tmp) {
        printf("%d ", tmp->value);
        tmp= tmp->next;
    }
    printf("\n");
}
 
 
int main(void) {
    List* list=CreateList();
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    fromArray(&list, arr, 10);
    printLinkedList(list);
 
    printf("nodes number %d\n", list->count);
 
    push(&list, 100);
    push(&list, 101);
    push(&list, 102); 
    push(&list, 103);
    push(&list, 104);
    push(&list, 105);
    
    printLinkedList(list);
 
    insert(list, 4, 1000);
    printLinkedList(list);
 
    deleteNth(&list, 3);
 
    printLinkedList(list);
    getchar();
}
собственно, при выполнении программы у меня список выводится не полностью, то есть куда то теряется указатель на начало списка... Вот и пытаюсь понять что не так, может поможете, плюсану
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru