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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2013, 13:25   #1
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
Восклицание Создать однонаправленную очередь

Всем привет! люди добрые помогите создать однонаправленную очередь с числами из диапазона от -50 до +50.
заранее благодарю.
shilovec5377 вне форума Ответить с цитированием
Старый 16.05.2013, 13:28   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

показывай наработки или во фриланс
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.05.2013, 18:06   #3
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
По умолчанию

вот есть пример очереди:
Код:
#include "iostream.h"
 
class Queue
{
private:
    
        int *Arr;
        int Size;
        int ptr;
 
public:
        Queue()
        {
            int i;
            Size=1000;
            Arr=new int[Size];
            for (i=0; i < Size; i++) Arr[i]=0;
            ptr=0;
        }
 
        Queue(int Sz)
        {
            int i;
            if (Sz <= 0) Sz=1000;
            Size=Sz;
            Arr=new int[Size];
            for (i=0; i < Size; i++) Arr[i]=0;
            ptr=0;
        }
 
        ~Queue()
        {
            delete [] Arr;
        }
 
        int isEmpty()
        {
            if (ptr == 0)
                return -1;
            else
                return 0;
        }
 
        void Enque(int x)
        {
            if (ptr < Size)
            {
                Arr[ptr++]=x;
            }
        }
 
        int Deque()
        {
            int z,i;
            if (ptr > 0)
            {
                z=Arr[0];
                for (i=1; i <= (ptr-1); i++) Arr[i-1]=Arr[i];
                ptr--;
                return z;
            }
 
            return -1;
        }
        void Show()
        {
           for (int i=0; i < ptr; i++)
               cout << Arr[i] << endl;
        }
 
};
 
int main(int argc, char* argv[])
{
 
    Queue Q;
 
    int n;
 
    while (1)
    {
        cout << "Enter number (0-end): ";
        cin >> n;
        if (n == 0) break;
        Q.Enque(n);
    }
 
    cout << endl << "Que:" << endl << endl;
    
    Q.Show();     
    
    return 0;
 
}
помогите с условием: Удалить из очереди все элементы, расположенные между минимальным и максимальным элементами очереди.

Подскажите как можно пределать, чтобы очередь заполнялась рандомно?

Цитата:
Сообщение от shilovec5377 Посмотреть сообщение

помогите с условием: Удалить из очереди все элементы, расположенные между минимальным и максимальным элементами очереди.
пожалуйста.

Последний раз редактировалось Stilet; 27.05.2013 в 17:50.
shilovec5377 вне форума Ответить с цитированием
Старый 27.05.2013, 17:32   #4
Nedward
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 85
По умолчанию

Цитата:
Сообщение от shilovec5377 Посмотреть сообщение
пожалуйста.
Ну, раз ты сказал пожалуйста... вот тебе мой вариант однонаправленной очереди, заполняемой случайным количеством случайных чисел :

Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

struct QueueElement
{
    QueueElement *next = NULL;
    int value;
    ~QueueElement()
    {
        if (next!=NULL) delete next;
    }
};

class Queue
{
private:
    QueueElement * firstElement = NULL;
public:
    Queue()
    {
        firstElement = NULL;
    }
    ~Queue()
    {
        if (firstElement!=NULL) delete firstElement;
    }
    //Добавление элемента в конец очереди:
    void add(int v)
    {
        //0 - создаем элемент:
        QueueElement * needElem =  new QueueElement();
        needElem->value = v;
        needElem->next = NULL;
        if (firstElement!=NULL) //если уже есть первый елемент
        {
            QueueElement * lastElem = firstElement;
            //ищем конец:
            while (lastElem->next != NULL)
            {
                lastElem = lastElem->next;
            }
            //Добавляем элемент в конец
            lastElem->next = needElem;
        }
        else
        {
            firstElement = needElem;
        }
    }
    void show()
    {
        QueueElement * n = firstElement;
        while (n!=NULL)
        {
            cout << n->value << "; ";
            n = n->next;
        }
        cout << endl;
    }
    void clear()
    {
        delete firstElement;
        firstElement = NULL;
    }
    bool isEmpty() {return !firstElement;}
};

int main()
{
    //Создаем очередь, заколняем, показываем и чистим:
    cout << "My list: ";
    Queue a;
    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);
    a.add(5);
    a.show();
    a.clear();
    //снова заполняем, на этот раз случайными числами:
    const unsigned int MAX_NUMBERS = 10;
    const unsigned int MIN_NUMBERS = 1;
    const int MAX_NUMBERS_VALUE = 5;
    const int MIN_NUMBERS_VALUE = -5;

    srand(time(NULL));
    unsigned int numNumbers = rand()%(MAX_NUMBERS-MIN_NUMBERS+1)+MIN_NUMBERS;

    int randomValue;
    for(int i = 0; i < numNumbers; i++)
    {
        randomValue = rand()%(MAX_NUMBERS_VALUE-MIN_NUMBERS_VALUE+1)+MIN_NUMBERS_VALUE;
        a.add(randomValue);
    }

    //Выводим случайный список чисел на экран:
    cout << "REAL random list: ";
    a.show();
    return 0;
}
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (c) Martin Golding
Nedward вне форума Ответить с цитированием
Старый 27.05.2013, 17:49   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтобы очередь заполнялась рандомно?
Код:
    while (1)
    {
        Q.Enque(rand()%1000);
    }
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2013, 18:19   #6
Nedward
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
    while (1)
    {
        Q.Enque(rand()%1000);
    }
А когда все гигабайты оперативной памяти заполнятся - сказать "горшочек, не вари"?
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (c) Martin Golding
Nedward вне форума Ответить с цитированием
Старый 27.05.2013, 18:41   #7
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
По умолчанию

что-то у меня на указатели ругается на *next и * firstElement
shilovec5377 вне форума Ответить с цитированием
Старый 27.05.2013, 19:33   #8
Nedward
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 85
По умолчанию

Цитата:
Сообщение от shilovec5377 Посмотреть сообщение
что-то у меня на указатели ругается на *next и * firstElement
Очень странно - только что вставил код из своего сообщения, и скомпилировал - все в порядке. А если попробовать убрать " = NULL"? И, кстати, это какому компилятору не понравилось? Мне мой Code::Blocks с MinGW такие вольности прощают

Очень интересно, что на это говорит стандарт...
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (c) Martin Golding
Nedward вне форума Ответить с цитированием
Старый 27.05.2013, 20:44   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А когда все гигабайты оперативной памяти заполнятся
Почесать тыковку и пойти поучить немного Си.
Цитата:
что-то у меня на указатели ругается на *next и * firstElement
Я угадаю эту ругань с третьей буквы "У"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать очередь.. Avvakymova Помощь студентам 0 09.06.2011 15:36
[Pascal] Создать очередь и скопировать в стек go.d_bq Помощь студентам 4 17.05.2011 23:23
C++,есть код,как правильно создать очередь? Aleksandr_Yanov Помощь студентам 0 19.08.2010 14:22
Создать шаблон класса «очередь» (C++) NieL Помощь студентам 0 09.06.2009 13:31