Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2018, 09:42   #1
Андрей Ш++
учу с++
Пользователь
 
Аватар для Андрей Ш++
 
Регистрация: 06.10.2017
Сообщений: 44
Сообщение Помогите доделать задачу. Список на C++

Всем привет!
Код:
#include <iostream>
 
using namespace std;
 
class Node
{
public:
    int number=0;
    Node* next=0;
    Node* prev=0;
};
void push( Node *name, int chisla){
    Node *a = new Node;
    a->number = chisla;
    a->next = 0;
    Node *b = name;
    while(b){
        if(b->next == 0){
            b->next = a;
            return;
        }
        b = b->next;
    }
}
 
int pop(Node *name)
{
    int q=0;
    Node *a = name;
    while(a->next){
        a = a->next;
        q++;
    }
    int znak = a->number;
    while(q>1){
        Node* temporarily;
        temporarily = name;
        name = temporarily->next;
        q--;
    }
    delete name->next;
    name->next=0;
    return znak;
}
void unshift ( Node *name, int chisla)
{
    Node *node = new Node;
    node->number = chisla;
    node->next = 0;
    node->prev = 0;
    Node *cur = name;
    while(cur)
    {
 
        if(cur->prev == 0)
        {
            cur->prev = node;
            return;
        }
 
        cur->next = cur;
        cur = cur->prev;
 
 
    }
}
 
int shift (class Node *name)
{
    int s=0;
    Node *a = name;
    while(a->prev)
    {
        a = a->prev;
        s++;
    }
    int w = a->number;
    while(s>1)
    {
 
        Node* tmp;
        tmp = name;
        name = tmp->prev;
        s--;
    }
    delete name->prev;
    name->prev=0;
    return w ;
}
 
int main()
{
    Node* root = new Node;
    cout <<"pop, push  -  ";
    push(root, 10);
    push(root, 20);
    cout <<pop(root)<<" "<<pop(root)<<" "<<pop(root)<<" ";
    cout <<"shift, unshift  - ";
    unshift (root, 10);
    unshift (root, 20);
    cout <<shift(root)<<" "<<shift(root)<<" "<<shift(root);
}
У даного кода есть несколько проблем:
- двунаправленный список не нужен.
- создавать ноду в начале не нужно... если не делается вставки (пуш или аншифт) то изначально должно существовать 0 нод
---------------------------------------






Надеюсь этот пост не останеться в игноре
Андрей Ш++ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите доделать список. paladinn Общие вопросы C/C++ 0 18.06.2009 11:53
Помогите доделать задачу n1ce > Kuzia Паскаль, Turbo Pascal, PascalABC.NET 2 08.01.2009 11:42
помогите доделать задачу motaro Фриланс 3 09.06.2008 19:59
Помогите доделать задачу!!!! Vincenzo Паскаль, Turbo Pascal, PascalABC.NET 4 11.05.2008 09:35