Witam
Postanowiłem w ramach poćwiczenia wskaźników i przygotowania do implementacji listy zaimplementować sobie stos i kolejkę, stos mi działa, kolejka nie.
Program jest taki, że nie wiem jak ustawić head -> prev na drugi element w kolejce i w czasie usuwania pierwszego elementu w kolejce znowu ustawić go na nowy drugi element. Może są jeszcze jakieś błędy, proszę was o rzucenie na to okiem i poprawienie nowicjusza.
'+' dodaje liczbę do kolejki, '-' usuwa liczbę z kolejki i ją wypisuje.
Sorry za angielskie komentarze, ale to jest mój sposób praktykę języka.
Mój kod:
#include <stdio.h>
#include <stdlib.h>
int i;
struct elem
{
int value;
struct elem *prev; // prev points to the previous element in queue
} *tail = NULL, *head = NULL; // head points to the first element in queue
// tail points to the last element in queue
void enqueue(int value)
{
struct elem *new_elem = (struct elem*)malloc(sizeof(struct elem)); // allocating memory for new element
new_elem -> prev = tail;
new_elem -> value = value;
if(head == NULL) head = new_elem;
tail = new_elem; // tail points to new (last) element
}
int dequeue()
{
struct elem *old_elem = head; // head and old_elem point to the first element in queue
head = head -> prev;
int value = old_elem -> value; // temporary value to return
free(old_elem);
return value;
}
int main()
{
char sign; // decides what to do with the queue
int value;
while(~scanf("%c", &sign))
{
if(sign == '+') // adding new element to queue
{
scanf("%d", &value);
enqueue(value);
printf("OK\n");
}
else if(sign == '-') // removing first element in queue
{
if(head != NULL) printf("%d\n", dequeue()); // while queue is not empty
else printf("BLAD\n");
}
}
return 0;
}