Реализовать все возможные операции для очереди - C (СИ)
Формулировка задачи:
Доброго времени суток) кому не составит большого труда, прошу помочь с заданием)
Реализовать все возможные операции
для очереди:
реализация очереди с помощью массива, реализация очереди с помощью списка, добавление элемента в конец очереди, поиск элемента в очереди, удаление элемента из очереди. Задание большое конечно, буду рад любой помощи с Вашей стороны) (язык желательно Си (не Си++))Решение задачи: «Реализовать все возможные операции для очереди»
textual
Листинг программы
#include <conio.h>
#include <stdio.h>
struct list
{
int el;
list *next;
};
struct queue
{
list *beg, *end;
};
void putToQueue(queue *q, int iEl) //добавить в очередь
{
list *tmp;
tmp = new list;
tmp->next = NULL;
tmp->el = iEl;
if(q->end != NULL)
q->end->next = tmp;
else
q->beg = tmp;
q->end = tmp;
}
int takeFromQueue(queue *q, int *iEl) // взять из очереди
{
if(q->beg == NULL) return 0;
list *tmp;
tmp = q->beg;
*iEl = tmp->el;
q->beg = tmp->next;
delete tmp;
if(q->beg == NULL) q->end = NULL;
return 1;
}
queue *CreateQueue() //создать очередь
{
queue *q;
q = new queue;
q->beg = NULL;
q->end = NULL;
return q;
}
int isQueueEmpty(queue *q) //проверка очереди на пустоту
{
if(q->beg == NULL) return 1;
return 0;
}
int ClearQueue(queue *q) //очистка очереди
{
if(q->beg == NULL) return 0;
list *tmp, *t;
tmp = q->beg;
while(tmp->next != NULL)
{
t = tmp;
tmp = t->next;
delete t;
}
q->beg = NULL;
q->end = NULL;
return 1;
}
void PrintQueue(queue *q) //вывестии очередь на экран
{
printf("\n");
queue *tmp = CreateQueue();
int iEl;
while(!isQueueEmpty(q))
{
takeFromQueue(q, &iEl);
printf("%d ", iEl);
putToQueue(tmp, iEl);
}
while(!isQueueEmpty(tmp))
{
takeFromQueue(tmp, &iEl);
putToQueue(q, iEl);
}
}
void main()
{
int i;
queue *q = CreateQueue();
printf(".......Put Elems..............");
for(i=30; i<40; i++)
{
putToQueue(q, i);
PrintQueue(q);
}
printf("\n......Take Elems...............");
while(!isQueueEmpty(q))
{
takeFromQueue(q, &i);
PrintQueue(q);
}
printf("\n........Put Elems.............");
for(i=30; i<35; i++)
{
putToQueue(q, i);
PrintQueue(q);
}
printf("\n........Clear queue.............");
ClearQueue(q);
PrintQueue(q);
_getch();
}
Объяснение кода листинга программы
- Структура списка:
- struct list
- int el;
- list *next;
- используется для представления элемента в очереди
- struct list
- Структура очереди:
- struct queue
- list *beg;
- list *end;
- используется для хранения элементов очереди
- struct queue
- Функция putToQueue:
- добавляет новый элемент в конец очереди
- создает новый экземпляр списка
- инициализирует его значением и ссылку на следующий элемент (если это не первый элемент)
- добавляет новый экземпляр списка в конец очереди
- Функция takeFromQueue:
- удаляет и возвращает первый элемент из очереди
- если очередь пуста, возвращает 0
- сохраняет значение удаленного элемента в переменной iEl
- удаляет ссылку на удаленный элемент в очереди
- Функция CreateQueue:
- создает новый экземпляр структуры queue
- инициализирует его булевым значением, указывающим на пустоту очереди
- Функция isQueueEmpty:
- проверяет, пуста ли очередь
- возвращает 1, если очередь пуста, и 0 в противном случае
- Функция ClearQueue:
- очищает очередь
- проходит по всем элементам очереди, начиная с первого
- удаляет каждый элемент и сохраняет его значение в переменной iEl
- удаляет все элементы из очереди
- Функция PrintQueue:
- выводит все элементы очереди на экран
- создает новый экземпляр структуры queue для временного хранения элементов
- проходит по всем элементам очереди
- удаляет каждый элемент и добавляет его в временную очередь
- выводит значение каждого элемента на экран
- добавляет каждый элемент обратно в очередь
- Функция main:
- содержит основной код программы
- создает новый экземпляр структуры queue
- добавляет элементы в очередь и выводит ее на экран
- удаляет элементы из очереди и выводит ее на экран
- добавляет элементы в очередь и выводит ее на экран
- очищает очередь и выводит ее на экран
- завершает программу
- Код программы написан на языке C
- использует библиотеки
и - объявлены функции: putToQueue, takeFromQueue, CreateQueue, isQueueEmpty, ClearQueue, PrintQueue, main
- использует библиотеки