Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Luna777
1 / 1 / 1
Регистрация: 25.11.2014
Сообщений: 38
#1

Переделать программу с односвязного на двусвязный список - C++

11.12.2014, 16:09. Просмотров 264. Ответов 3
Метки нет (Все метки)

Помогите переделать програмку с односв'язного на двосв'язний список.
Условие задачи было такое: реализовать двосв'язный список, считать файл целых чисел (n>100) сохранить в списке в порядке возрастания и реализовать процедуру поиска если есть число виводить true если нет то виводить false. Все это ми делали на паре для односвязного, может ли кто то помочь переделать на двосвязный и может кто то обьяснить подробно принцип работы. Заранее спасибо! Вот програмка :
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 <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
 
typedef struct ListItem {
    int value;
    struct ListItem * next;
} LISTITEM;
 
LISTITEM * head = NULL;
char fileName[15] = "data100.txt\0"; 
 
void loadFromFile (char *);
void printList ();
void insert(int);
void cleanList ();
bool isInList (int);
 
int main(int argc, char** argv) {
    printList();
    loadFromFile(fileName);
    printList();
    
    if (isInList(1000))
        printf("true\n");
    else
        printf("false\n");
    
    printf("Cleaning:");
    cleanList();
    printf(" OK\n");
    printList();
 
    system("PAUSE");
    return 0;
    
}
 
void printList() {
    LISTITEM * current = head;
    printf("Have list:\n");
    while (current != NULL) {
       printf("%4d -> ",current->value);
       current = current->next;
    }
    printf("\nEnd of list.\n");
}
 
void insert (int v) {
    LISTITEM * item = new LISTITEM;
    item->value = v;
    item->next = NULL;
    LISTITEM * curr;
    LISTITEM * prev = NULL;
    
    if (head == NULL)
        head = item;
    else {
        curr = head;
        while (curr->value < item->value) {
            prev = curr;
            curr = curr->next;
            if (curr == NULL) break;
        }
        if (prev == NULL) {
            item->next = head;
            head = item;
        } else {
            item->next = curr;
            prev->next = item;
        }
    }
}
 
void cleanList () {
    LISTITEM * curr;
    while (head != NULL) {
        curr = head;
        head = head->next;
        delete curr;
    }
}
 
void loadFromFile (char * fileName) {
    FILE * f;
    float v;
    
    f = fopen(fileName,"r");
    while (!feof(f)) {
        fscanf(f,"%f",&v);
        insert(floor(v*1000));
    }
    fclose(f);
}
 
bool isInList (int v) {
    LISTITEM * curr = head;
    
    while ((curr != NULL) && (curr->value < v))
        curr = curr->next;
    if ((curr == NULL) || (curr->value > v))
        return false;
    else
        return true;
}

http://www.cyberforum.ru/cpp-beginners/thread534605.html
0
Вложения
Тип файла: txt data100.txt (1.1 Кб, 1 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2014, 16:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Переделать программу с односвязного на двусвязный список (C++):

Переделать на Двусвязный список
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string.h&gt; #include...

Как переделать двусвязный список в циклический c++
Как переделать двусвязный список в циклический c++

Возможно ли как-то переделать односвязный список в двусвязный?
Собственно вопрос в названии. Возможно ли переделать односвязный список в...

Выручайте! Нужно переделать прогу под двусвязный список.ничего не понимаю)
#include &lt;iostream&gt; #include &lt;conio.h&gt; struct Node { int memSize; ...

Как переделать эту прогу в шаблон классов "Двусвязный список" произвольных элементов
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt;2 #include &lt;conio.h&gt; using...

3
Luna777
1 / 1 / 1
Регистрация: 25.11.2014
Сообщений: 38
11.12.2014, 16:30  [ТС] #2
Я так прочитала нужно добавить указатель на преведущий елемент вот так:
C++
1
struct ListItem * prev;
а что еще нужно чтоб это был двусв'язный список? помогите пожалуйста
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
11.12.2014, 17:16 #3
http://www.cyberforum.ru/cpp-beginne...EF%E8%F1%EE%EA
http://www.cyberforum.ru/cpp-beginne...EF%E8%F1%EE%EA
http://www.cyberforum.ru/cpp-beginne...EF%E8%F1%EE%EA
http://www.cyberforum.ru/cpp-beginne...EF%E8%F1%EE%EA
0
Luna777
1 / 1 / 1
Регистрация: 25.11.2014
Сообщений: 38
11.12.2014, 21:09  [ТС] #4
Помогите пожалуйста кто нибудь....очень нужно,все сдала остался последний зачет и без этой программы не хочет ставить пожалуйста кто разбирается помогите....
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2014, 21:09
Привет! Вот еще темы с решениями:

Из односвязного списка в двусвязный
Помогите, кусок переделать в двусвязный список. #include &lt;iostream&gt; using...

Сделать двусвязный цикл из односвязного. Задача Джозевуза
Добрый день. Встала задача сделать программу для реализации считалки Джозефуза...

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список
спасайте Сформировать список из 10 работников, используя динамическую...

Двусвязный список (в конец двусвязного списка добавить другой список)
здравствуйте, подскажите пожалуйста, как в конец двусвязного списка добавить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru