Реализовать все возможные операции для очереди - 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();
}

Объяснение кода листинга программы

  1. Структура списка:
    • struct list
      • int el;
      • list *next;
    • используется для представления элемента в очереди
  2. Структура очереди:
    • struct queue
      • list *beg;
      • list *end;
    • используется для хранения элементов очереди
  3. Функция putToQueue:
    • добавляет новый элемент в конец очереди
    • создает новый экземпляр списка
    • инициализирует его значением и ссылку на следующий элемент (если это не первый элемент)
    • добавляет новый экземпляр списка в конец очереди
  4. Функция takeFromQueue:
    • удаляет и возвращает первый элемент из очереди
    • если очередь пуста, возвращает 0
    • сохраняет значение удаленного элемента в переменной iEl
    • удаляет ссылку на удаленный элемент в очереди
  5. Функция CreateQueue:
    • создает новый экземпляр структуры queue
    • инициализирует его булевым значением, указывающим на пустоту очереди
  6. Функция isQueueEmpty:
    • проверяет, пуста ли очередь
    • возвращает 1, если очередь пуста, и 0 в противном случае
  7. Функция ClearQueue:
    • очищает очередь
    • проходит по всем элементам очереди, начиная с первого
    • удаляет каждый элемент и сохраняет его значение в переменной iEl
    • удаляет все элементы из очереди
  8. Функция PrintQueue:
    • выводит все элементы очереди на экран
    • создает новый экземпляр структуры queue для временного хранения элементов
    • проходит по всем элементам очереди
    • удаляет каждый элемент и добавляет его в временную очередь
    • выводит значение каждого элемента на экран
    • добавляет каждый элемент обратно в очередь
  9. Функция main:
    • содержит основной код программы
    • создает новый экземпляр структуры queue
    • добавляет элементы в очередь и выводит ее на экран
    • удаляет элементы из очереди и выводит ее на экран
    • добавляет элементы в очередь и выводит ее на экран
    • очищает очередь и выводит ее на экран
    • завершает программу
  10. Код программы написан на языке C
    • использует библиотеки и
    • объявлены функции: putToQueue, takeFromQueue, CreateQueue, isQueueEmpty, ClearQueue, PrintQueue, main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы