- •Нижегородский государственный университет им. Н.И. Лобачевского
- •Оглавление
- •Предисловие
- •Глава 1. Вычисление значений функций
- •1.1. Операторы циклов
- •1.2. Операторы ветвления
- •Когда в программе нужно выбрать один из многочисленных вариантов, бывает целесообразным применять оператор-переключатель switch. Этот оператор называется ещё оператором множественного выбора [1].
- •Switch (выражение)
- •1.3. Алгоритмы, необходимые для написания программ
- •Глава 2. Суммирование рядов
- •Глава 3. Позиционная запись числа
- •Глава 4. Делители целого числа
- •5.1. Сортировка вставкой
- •5.2. Метод пузырька
- •5.3. Сортировка выбором
- •5.4. Быстрая сортировка
- •Глава 6. Работа с файлами. Построение массивов без повторений
- •6.1. Работа с файлами
- •6.2. Построение массивов без повторений
- •Глава 7. Обработка последовательности символов
- •7.1. Алгоритм выделения слова из строки
- •7.2. Выбор слов, подходящих под шаблон
- •7.3. Перевод прописных символов в строчные
- •Глава 8. Побитовые операции
- •Глава 9. Преобразование и построение матриц
- •Содержимое файла “input.Txt”
- •Глава 10. Структуры
- •Выделение памяти под объект coat
- •Содержимое файла "input.Txt".
- •Содержимое файла "outout.Txt"
- •Содержимое файла "input.Txt"
- •11. Динамические структуры данных
- •11.1. Односвязные списки
- •11.2. Очереди
- •11.3. Стеки
- •Содержимое файла “input.Txt”
- •Содержимое файла “input.Txt”
- •Список литературы
11.2. Очереди
Очередь – это связный список, закон построения которого следующий: новый элемент всегда ставится в конец списка, а удаление элемента происходит из его начала [4, 32]. Таким образом, очередь является структурой данных, которые организованы по принципу FIFO (First In, First Out) – «Первый пришел – первый вышел». Чтобы не ограничивать максимальное число элементов в очереди, очередь может быть реализована в виде однонаправленного списка. В этом случае объекты очереди имеют такую же структуру, как и объекты однонаправленного списка. Часть полей описывает характеристики конкретного объекта и есть поле типа указатель, которое содержит адрес следующего в очереди элемента.
С очередью связаны два указателя. Один содержит адрес объекта, находящегося в начале очереди, а другой хранит адрес последнего объекта очереди. Первый из них назовем begin, а второй end.
Листинг 11.2. В программе создается очередь из некоторых заданий, характеризующихся номером и длиной выполнения. Структуру этих объектов можно описать так:
struct ochered {
int number; //Номер задания
int count; //Объем задания
ochered *next; //Указатель на следующий элемент
};
Задания добавляются в очередь и удаляются из очереди.
Файл “ stdafx.h”
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;
Файл “Och.h”
struct ochered
{
int number; //Номер задания
int count; //Объем задания
ochered *next; //Указатель на следующий элемент
};
// Прототип функции постановки задания в очередь:
void add_ochered(ochered **begin, ochered **end, int nn, int dl);
//Прототип функции удаления задания из очереди:
void del_ochered(ochered **begin, ochered **end);
// Прототип функции печати содержимого очереди:
void print_ochered(ochered *begin);
Файл “Och.cpp”
#include "stdafx.h"
#include "Och.h"
void add_ochered(ochered **begin, ochered **end, int nn, int dl)
{
ochered *new_el;
//Создание нового элемента:
new_el=new ochered;
(*new_el).number=nn;
(*new_el).count=dl;
(*new_el).next=NULL;
if(*begin==NULL)
{
//Очередь пуста.Элемент добавляется как единственный:
(*begin)=(*end)=new_el;
return;
}
//Добавление нового элемента в очередь:
(**end).next=new_el;
(*end)=new_el;
}
void del_ochered(ochered **begin, ochered **end)
{
ochered *ptr;
ptr=*begin;
if(*begin==NULL)
{
//Очередь пуста:
cout<<"Очередь пуста";
return;
}
//Передвигается начало очереди:
(*begin)=(**begin).next;
//Освобождается место удаляемого элемента:
delete ptr;
}
void print_ochered(ochered *begin)
{
ochered *ptr=begin;
cout<<" Номер задания | Его длина"<<'\n';
while(ptr!=NULL)
{
cout.width(12);
cout<<(*ptr).number;
cout.width(18);
cout<<(*ptr).count<<'\n';
ptr=(*ptr).next;
}
}
//L11_2.cpp
#include "stdafx.h"
#include "Och.h"
int _tmain( )
{
ochered *begin, *end;
int nn,dl;
setlocale(LC_CTYPE,"rus");
begin=end=NULL;
//Постановка задания в очередь:
cout<<"Введите номер задания и его длину ";
cin>>nn>>dl;
cout<<"Если хотите прекратить ввод введите номер и длину нулевыми\n";
do
{
add_ochered(&begin, &end, nn, dl);
cout<<"Введите номер задания и его длину ";
cin>>nn>>dl;
}while(nn!=0);
print_ochered(begin);
//Удаляется задание из очереди:
del_ochered(&begin, &end);
print_ochered(begin);
cin.get();
cin.get();
return 0;
}
Результат выполнения программы листинга 11.2 представлен на рис. 11.7.
Рис. 11.7. Результат работы программы листинга 11.2