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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++]шаблон класса очередь 
V
    Опции темы
NieL
Дата 9.6.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Создать шаблон класса «очередь». Написать программу, демонстрирующую работу с этим шаблоном для различных типов параметров шаблона. Программа должна содержать меню, позволяющее осуществить проверку всех методов шаблона. 
PM MAIL   Вверх
zim22
Дата 9.6.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



очередь на базе массива
Код

// 002.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
template <class Item>
class Queue {
private:
  Item *q; int N, head, tail;
public:
  Queue(int maxN) {
    q = new Item[maxN + 1];
    N = maxN + 1;
    head = N;
    tail = 0;
  }
  int empty() const {
    return head % N == tail;
  }
  void put(Item item) {
    q[tail++] = item;
    tail = tail % N;
  }
  Item get() {
    head = head % N;
    return q[head++];
  }
};

int _tmain(int argc, _TCHAR* argv[])
{
  Queue<char> q(11);
  q.put('E');  
  std::cout << q.get();
  q.put('A');  
  q.put('S');
std::cout <<   q.get();
  q.put('Y');
  std::cout << q.get();
  std::cout << q.get();
  std::cout << q.get();
  
    return 0;
}




очередь на базе списка
Код

// 005.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

template <class Item>
class Queue {
private:
  struct node {
    Item item;
    node *next;
    node(Item x) {
      item = x;
      next = 0;
    }
  };
  typedef node *link;
  link head, tail;

  void deletelist() {
    for (link t = head; t != 0; head = t) {
      t = head->next;
      delete head;
    }
  }
public:
  Queue() : head(NULL), tail(NULL) { }
  Queue(const Queue &rhs) {
    head = 0;
    *this = rhs;
  }
  Queue &operator=(const Queue &rhs) {
    if (this == &rhs) return *this;
    deletelist();
    link t = rhs.head;
    while (t != 0) {
      put(t->item);
      t = t->next;
    }
    return *this;
  }
  ~Queue() { deletelist(); }
  int empty() const { return head == 0; }
  void put(Item x)  {
    link t = tail;
    tail = new node(x);
    if (head == 0)
      head = tail;
    else
      t->next = tail;
  }
  Item get() {
    Item v = head->item;
    link t = head->next;
    delete head;
    head = t;
    return v;
  }
};
int _tmain(int argc, _TCHAR* argv[])
{
  const int M = 4;
  const int N = 10;

  Queue<int> queues[M];
  for (int i = 0; i < N; i++) {
    int in = rand() % M, out = rand() % M;
    queues[in].put(i);
    cout << "==============" << endl << i << " in ";

    if (!queues[out].empty())
      cout << queues[out].get() << " out";
    cout << endl;

    for (int k = 0; k < M; k++) {
      Queue<int> q = queues[k];
      cout << endl << k << ": ";
      while (!q.empty())
        cout << q.get() << " ";
    }
    cout << endl;
  }
    return 0;
}





--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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