Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Связной список 
V
    Опции темы
MagicPRO
Дата 2.1.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 4.10.2006
Где: Kremencity

Репутация: нет
Всего: нет



Написать программу организации связного списка по следующему признаку: если введённый символ буква, то в конце списка добавляется узел, который содержит символ, иначе узел добавляется в начало списка и содержит цифру. Народ выручите пожалуста до экзамена 2 дня, если сдам эту лабу, поставят автомат, списки толком не учили, напишите хотя бы основную часть кода!!!!

Это сообщение отредактировал(а) MagicPRO - 2.1.2007, 14:26
--------------------
 smile=iwashere 
PM MAIL ICQ Skype   Вверх
Oleg_Ci
Дата 3.1.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



 smile 
Код

#include <iostream>
using namespace std;

class Node{ // узел списка
public:
    union { double n; char ch; }; // данные
    Node * Next;
    bool Num; // true-число, false-символ

    Node( double a = 0 ): n(a), Next(NULL), Num(true) {};
    Node( char c = 0 ): ch(c), Next(NULL), Num(false) {};
    friend ostream & operator<<( ostream & out, const Node & n );
};

class List{ // связанный список
    Node *Begin, *End; // первый и последний элемент списка
public:
    List(): Begin(NULL), End(NULL){};
    Node * begin(){ return Begin; } // начало списка
    Node * end() { return NULL; } // конец списка
    // добавление числа в конец списка
    void Push_back( double a ){
        if( End )
            End = End->Next = new Node(a);
        else
            Begin = End = new Node(a);
    }
    // добавление символа в начало списка
    void Push_front( char c ){
        Node * n = new Node(c);
        if( Begin ){
            n->Next = Begin; 
            Begin = n;
        }
        else Begin = n;
    }
    // удаление данных из списка
    void Erase(){
        for( End = Begin; Begin; Begin = End ){
            End = End->Next;
            delete Begin;
        }
        Begin = End = NULL;
    }
    ~List(){
        Erase();
    }
};
ostream & operator<<( ostream & out, const Node & n ){
    if( n.Num ) // если узел содержит число
        out << n.n;
    else out << n.ch; // иначе содержится симол
    return out;
}
//////////////////////////  MAIN /////////////////////////////
int main(){
    List array;
    cout << "Enter 10 int or char:\n";
    double n;
    char c;

    // цикл добавления 10 чисел или символов
    for( int i=0; i<10; i++ ){
        if( cin >> n ){ // если считали число
            array.Push_back( n ); // число в конец списка
        }
        else{ // если считываем не число
            cin.clear();
            cin >> c;
            array.Push_front( c ); // символ в начало списка
        }
    }
    cout << "\n\nList out:\n";

    // Вывод всего что считали
    for( Node * pt = array.begin(); pt; pt = pt->Next )
        cout << *pt << "\n";
    
    array.Erase(); // удаление всех элементов

    cin.sync();
    cout << "\n\nPress enter key to continue";
    cin.get(); // пауза
    return 0;
}

PM MAIL   Вверх
MagicPRO
Дата 3.1.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 4.10.2006
Где: Kremencity

Репутация: нет
Всего: нет



Огромное спасибо, вобщето это нужно было связать со структурами, но это моя ошибка, сам уже переделаю!  smile 
--------------------
 smile=iwashere 
PM MAIL ICQ Skype   Вверх
Oleg_Ci
Дата 5.1.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Интересная задача, создать список чтоб и буквы и цифры содержал...
Я тут ещё поизобретал, связанный список сделал, в него можно запихнуть всё что "дружит" с функцией вывода на консоль
Код

friend ostream & operator<<( ostream & out, ... );
Код

#include <iostream>
#include <string>
using namespace std;

template <typename tip>
class node;

class base{ // базовый класс для узлов списка
public:
    base * next; // указатель на следующий узел node
    base(): next(NULL) {}; // конструктор

    // деструктор
    virtual ~base(){};
    // функция вывода данных на консоль
    virtual void out( ostream & out )const =0;
};

template <typename tip>
class node: public base{ // узел для связанного списка
    tip data; // данные сохнаяемые в узле
public:
    node<tip>( tip a = tip()): data(a) {}; // конструктор
    node<tip>( const node & n ): data( n.data ) {}; // копирующий
    virtual void out( ostream & out )const {
        out << data << "\n";
    }
};

class list{
public:
    // начало и конец списка
    base *begin, *end;
    // конструктор
    list(): begin(NULL), end(NULL) {};
    // добавляем в конец списка
    template <typename tip>
    void push_back( const tip & a ){
        if( !begin )
            begin = end = new node<tip>( a );
        else
            end = end->next = new node<tip>(a);
    }
    // добавляем в начало списка
    template <typename tip>
    void push_front( const tip & a ){
        node<tip> *n = new node<tip>(a);
        if( !begin )
            begin = end = n;
        else{
            n->next = begin;
            begin = n;
        }
    }
    // удаление данных из списка
    void erase(){
        for( base * b = begin; b; b=begin ){
            begin = begin->next;
            delete b;
        }
        begin = end = NULL;
    }
    // вывод данных списка на консоль
    void out(){
        for( base * b = begin; b; b=b->next )
            b->out(cout);
    }
    // деструктор
    ~list() { erase(); }
};

class a{ // класс для эксперимента
    static const int b = 555555;
    friend ostream & operator<<( ostream & out, const a & x ){
        out << x.b;
        return out;
    }
};
//////////////////////////  MAIN /////////////////////////////
int main(){
    list array;
    array.push_back( 10 ); // int
    array.push_back( 'c' ); // char
    array.push_back( 8.45 ); // float - double
    array.push_back( string("asd")); // string

    array.push_front( static_cast<char*>("qwe2")); // char*
    array.push_front( static_cast<double>( 2.3e4 )); // double
    array.push_front( 0xff ); // int
    array.push_front( a() ); // пихаем в список класс 'a'

    array.out(); // вывод на консоль всего что запихнули в array

    cout << "\n\nPress enter key to continue";
    cin.get(); // пауза
    return 0;
}

PM MAIL   Вверх
MagicPRO
Дата 6.1.2007, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 4.10.2006
Где: Kremencity

Репутация: нет
Всего: нет



smile  smile  молодец!!!! Спасибо будет щас над чем подумать и код поразбирать

Добавлено @ 01:01 
2 Oleg Ci
а почему ты пишешь при помощи классов, так проще. Нам препод говорил шо типа списки связывать только со структурами, или у тебя такой стиль рограммирования? smile 
--------------------
 smile=iwashere 
PM MAIL ICQ Skype   Вверх
Oleg_Ci
Дата 6.1.2007, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Да фиг его знает, что лучше, структуры или классы, вроде это одно и тоже, поставь в место слова class слово struct,
и всё. А с классами, делал потому что здесь наследование, да и вроде понятней для меня так. smile 
Смотри внимательней, я ещё учусь сам, могут быть ошибки в коде.
PM MAIL   Вверх
MagicPRO
Дата 6.1.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 4.10.2006
Где: Kremencity

Репутация: нет
Всего: нет



Понятно, я тоже учусь. Насчет ошибок то ниче, покапаюсь найду,  в крайнем случае к преподу обращусь. Спасибо!
--------------------
 smile=iwashere 
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0698 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.