Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Zadanie nr 2
- # include <stdio.h>
- # include <stdlib.h>
- # include <stdbool.h>
- struct queue_node {
- int data;
- // Dodałem wskaźnik na poprzedni element "*prev"
- struct queue_node *next, *prev;
- };
- struct queue_pointers {
- struct queue_node *head, *tail;
- };
- // Jesli order == true to element dodawany jest na koncu kolejki
- // Jesli order == false to element dodawany jest na poczatku kolejki
- bool enqueue(struct queue_pointers *queue, int data, bool order) {
- struct queue_node *new_node = (struct queue_node *)
- malloc(sizeof(struct queue_node));
- if (NULL != new_node) {
- if(order) {
- new_node->data = data;
- new_node->next = NULL;
- if (NULL == queue->head)
- queue->head = queue->tail = new_node;
- else {
- new_node->prev = queue->tail;
- queue->tail->next = new_node;
- queue->tail = new_node;
- }
- return true;
- } else {
- new_node->data = data;
- new_node->prev = NULL;
- if (NULL == queue->head)
- queue->head = queue->tail = new_node;
- else {
- new_node->next = queue->head;
- queue->head->prev = new_node;
- queue->head = new_node;
- }
- return true;
- }
- }
- return false;
- }
- bool dequeue(struct queue_pointers *queue, int *data) {
- if(queue->head != NULL) {
- struct queue_node *tmp = queue->head->next;
- *data = queue->head->data;
- free(queue->head);
- queue->head = tmp;
- if (NULL == tmp)
- queue->tail = NULL;
- return true;
- }
- return false;
- }
- void print_queue(struct queue_pointers queue) {
- for (; NULL != queue.head; queue.head = queue.head->next)
- printf("%d ", queue.head->data);
- printf("\n");
- }
- // Cały kod od góry do tej linijki jest wzięty z instrukcji oraz delikatnie przerobiony aby spełniał polecenie danego zadania
- int main() {
- // Tworzymy początek i koniec kolejki
- struct queue_pointers queue = {NULL, NULL};
- int i;
- // Wypełniamy kolejke liczbami od 0 do 4
- // Jesli order == true to element dodawany jest na koncu kolejki
- // Jesli order == false to element dodawany jest na poczatku kolejki
- for(i = 0; i < 5; i++) {
- enqueue(&queue, i, true);
- }
- puts("Zawartość kolejki:");
- print_queue(queue);
- puts("Kolejność usuwania elementów kolejki:");
- while(dequeue(&queue, &i)){
- printf("%d ", i);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement