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

Двусвязные списки, не могу добавить узел с конца - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Быстрая сортировка Хоара http://www.cyberforum.ru/cpp-beginners/thread261701.html
Быстрая сортировка Хоара (QSort) разбивает массив в ходе сортировки до тех пор, пока размер частичного подмассива не станет равен 1 элементу. Есть подозрение, что лучше бы она не доводила разбиение до 1, а передала частичный подмассив какой-нибудь медленной сортировке при достижении размера подмассива M элементов (M<=N). Модифицируйте алгоритм QSort и напишите...
C++ как выглядит в си++ Program kursak; Const Nmax = 5; {Максимальный размер массива} Type Matrix = array of integer;; m:=m; m:=s; end; end http://www.cyberforum.ru/cpp-beginners/thread261679.html
После каждого вхождения символа C в строку S вставить строку S0 C++
Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0. #include <iostream> #include <string.h> using namespace std; const int N=30;
C++ Моделирование алгоритмических вычислений на машинах произвольного доступа
Построить программу для машины произвольного доступа, реализующая вычисления следующих функций, и найти их значения для заданных неотрицательных аргументов. Входные данные заносятся в регистры МДД R1, R2, результат сохраняется в регистре R1. • f(x) = 0; • f(x) = x + 1; • f(x) = x - 1; • f(x, y) = x + y; • f(x, y) = x - y; • f(x, y) = x * y; • f(x, y) = x div y; • f(x, y) = x mod y.
C++ Вычисление значений функции http://www.cyberforum.ru/cpp-beginners/thread261632.html
Доброго времени суток! Помогите с одной задачей.Надо построить таблицу значений(функция y=ln(x/(x-2))). Если в некоторой точке x функция не определена, то вывести на экран сообщение об этом.Я написал кой-что,но она зачения выводит но ошибку нет,помогите с этой напастью)Спасибо заранее)))) #include<math.h> #include<stdio.h> float f( float x ){ return(log(x/(x-2))); } void...
C++ Определить истинные следующие утверждения: Определить истинные следующие утверждения: a) «любое выражение в Си может быть преобразован в оператор добавлением к нему точки с запятой (;)» b) «пустой оператор в Си - это отсутствие каких-либо символов в том месте конструкции, где по синтаксису может находиться оператор» c) «составной оператор (блок) в Си - это совокупность операторов, помещенных в фигурные скобки» d) «оператор... подробнее

Показать сообщение отдельно
Virusolog
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
22.03.2011, 10:51     Двусвязные списки, не могу добавить узел с конца
Делаю лабу по динамическим структурам данным, написал функцию добавления с начала и с конца.
Но, добавление с конца не работает, я не могу найти ошибки или недочета в алгоритме, не могу отследить причину того, что при добавлении узла с конца происходит постоянное перезаписывние вида

ввод: 56
->56
ввод: 4
->4

А должно в итоге быть как ->56->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
#include <iostream>
using namespace std;
struct list {
    int data;
    list *next; // Содержит адрес области в памяти на следующий элемент
    list *prev; // Содержит адрес в области памяти на предыдущий элемент
};
// Функции для работы со списком
list *prepend(int val,list *head){
    // Создаем список, оператор new возвращает адрес выделенного фрагмента памяти
    list *pointer = new list; //выделение памяти для новой ячейки
    pointer->data = val; //запись данных в ячейку
    pointer->next = NULL; //инициализация нулем
    pointer->prev = NULL; //инициализация нулем
    // Если список пуст
    if(head == NULL){
      return pointer;
    }
    else {// Если в списке есть хотя бы одна ячейка
      pointer->next = head; //после этой ячейки должна идти бывшая первая
      head->prev = pointer;
      head = pointer; //началом списка делаем только что созданную ячейку
      return head;
    }
};
 
list *append(int val, list *head){
    list *prev,*ptr;
    // Добавить узел в конце списка
    list *pointer = new list;
    pointer->data = val;
    pointer->next = NULL;
    pointer->prev = NULL;
    // Если список пуст
    if(head == NULL){
        return pointer;
    }
    else {
        // Есть начальный адрес списка и только что созданный
        // Нужно найти адрес для последнего узла
        for(prev = head, ptr = head->next; ptr; prev = ptr, ptr = ptr->next);
 
        if(ptr == NULL)
        {
           prev->next = pointer;
           pointer->prev = prev;
           return pointer;
 
        }
    }
};
 
void printlist(list *first){
    list *ptr; //копируем начальный адрес
    for(ptr = first; ptr; ptr = ptr->next){
        cout << "->" << ptr->data;
    }
};
 
void WorkWithList(){
    // Переменная List не содержит адреса на начало списка
    // List должна содержать начальный адрес списка
    list *List = NULL;
    int value,choice;
    for(;;)
    {
    // Вспомагательное меню для работы со списком
    cout << "(1) Dobavlenie uzla v nachalo spiska\n";
    cout << "(2) Dobavlenie uzla v konets spiska\n";
    cout << "(3) Dobavlenie uzla v zadannuy pozitsiu\n";
    cout << "(4) Udalenie tekushchego uzla\n";
    cin >> choice;
    switch(choice)
    {
        case 1:
            cout << "Enter a number ";
            cin >> value;
            // Добавить узел с новым значением в начало списка
            List = prepend(value,List);
            printlist(List);
            break;
        case 2:
            cout << "Enter a number ";
            cin >> value;
            // Добавить узел с новым значением в конец списка
            List = append(value,List);
            printlist(List);
            break;
    }
    }
};
void WorkWithStack(){
};
int main(){
    // Организация меню
    cout << "Enter a number between 1 and 3: ";
    int number;
    cin >> number;
    switch(number)
    {
        case 1: WorkWithList();
        case 2: WorkWithStack();
        // case 3: WorkWithFlow();
    }
    return 0;
}
Помогите, пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru