Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Как преобразовать односвязный список в двусвязный список?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
ray1 ray1 вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.07.2020
По умолчанию Как преобразовать односвязный список в двусвязный список? - 06.07.2020, 18:08

Дан код с односвязным списком, нужно преобразовать в двусвязный список. Помогите пожалуйста
cpp Код:
#include<iostream>
#include<cstdlib>
#include<ctime>
 
using namespace std;
 
struct Node
{
    Node() : next(NULL) {}
    int   field;
    Node* next;
};
 
bool isEmpty(Node* p)
{
    return p->next == NULL;
}
 
Node* Next(Node* p, Node* node)
{
    if (isEmpty(p))
        return NULL;
 
    return node->next;
}
 
Node* Prev(Node* p, Node* node)
{
    if (isEmpty(p))
        return NULL;
    if (node == p->next)
        return NULL;
 
    Node* cp = p->next;
    while (cp->next != node)
        cp = cp->next;
    return cp;
}
 
Node* Add(Node* p, int num, Node* node = NULL)
{
    Node* elem = new Node();
    elem->field = num;
    if (node == NULL)
    {
        {
            elem->next = p->next;
            p->next = elem;
        }
        return elem;
    }
    elem->next = node->next;
    node->next = elem;
    return elem;
}
 
Node* Delete(Node* p, Node* node)
{
    if (node == NULL)
    {
        return NULL;
    }
    if (node == p->next)
    {
        p->next = node->next;
        delete node;
        return p->next;
    }
    Node* prev = Prev(p, node);
    prev->next = node->next;
    delete node;
    return prev;
}
 
Node* getLast(Node* p)
{
    Node* cp = p->next;
    while (Next(p, cp) != NULL)
        cp = Next(p, cp);
    return cp;
}
 
void Clear(Node* p)
{
    Node* cp = p->next;
    if (cp == NULL)
        return;
    do
    {
        Node* d = cp;
        cp = Next(p, cp);
        delete d;
    } while (cp != NULL);
    p->next = NULL;
}
 
void Print(Node* p)
{
    if (isEmpty(p))
    {
        cout << "The list is empty" << endl;
        return;
    }
    Node* cp = p->next;
    while (cp != NULL)
    {
        cout << cp->field << " ";
        cp = Next(p, cp);
    }
    cout << endl;
}
 
int delete_value(Node* p, const int measure)
{
    for (Node* cp = p->next; cp; )
    {
        if (cp->field % 10 == measure)
        {
            Node* cp2 = cp;
            cp = Next(p, cp);
            Delete(p, cp2);
        }
        else
            cp = Next(p, cp);
    }
    return 0;
}
 
void Sort(Node* head)
{
    Node* last = NULL;
    for (Node* p = head; p; p = p->next)
    {
        Node* p2 = head;
        for (; p2->next != last; p2 = p2->next)
            if (p2->next->field < p2->field)
                std::swap(p2->next->field, p2->field);
 
        last = p2;
    }
}
 
int main()
{
    cout << "Create a list\n";
 
    Node list;
 
    Print(&list);
 
    int N;
    cout << "Enter the number of items: ";
    cin >> N;
    srand(time(NULL));
    for (int i = 0; i < N; i++)
    {
        int z = 100 - rand() % 200;
        cout << "\nNumber " << i + 1 << ": " << z;
 
        Add(&list, z);
    }
   
    cout << "\n";
 
    Print(&list);
    cout << "Rearrange addresses of two adjacent elements:\n";
    Sort(list.next);
    Print(&list);
   
    cout << "Delete items ending in number 5:\n";
    delete_value(&list, 5);
    delete_value(&list, -5);
   
    Print(&list);
    Clear(&list);
}
Ответить с цитированием
Ads
Ответ

Метки
c++ , нужна помощь , нужна помощь.

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязный неоднородный список, язык СИ. Salatiq Вопросы начинающих программистов 0 16.05.2012 21:04
Односвязный неоднородный список, язык СИ. Salatiq С/С++ 0 16.05.2012 21:02
Упорядоченое добавление элементов в двусвязный список Genochka Вопросы начинающих программистов 0 08.04.2012 21:08
Создать структуру с именем Sportsmen и сформировать односвязный список! sniperni С/С++ 1 20.03.2012 09:35
Разработайте класс, реализующий линейный двусвязный список Black Mamba Pascal 2 25.08.2011 00:05
Создать двусвязный список и продублировать в нём все единицы. Tyurs92 Вопросы начинающих программистов 0 12.05.2011 19:24
Односвязный список turkmen_26 Pascal 0 19.12.2010 02:22
Преобразовать дерево в список Student2 Prolog 6 25.02.2007 14:35
односвязный список Гоблин Pascal 3 28.10.2006 21:00
Как преобразовать строку в список... Zerо Prolog 13 12.09.2006 19:26
Как создать двусвязный список zhenyarm Вопросы начинающих программистов 4 18.10.2005 14:54
Односвязный список как с ним работать Кит С/С++ 5 21.05.2005 00:03



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов