[C] Model FIFO

0

Witam,
zabrzmi to głupio, ale czy mógłby mi ktoś napisać pełen kod modelu FIFO w C z komentarzami? Uczę się tego języka, ale nie wiem, jak się do tego zabrać. Zależy mi na używaniu jak najprostszych struktur (funkcje, tablice itp.)

W internecie znalazłem coś takiego:

int stanStanowiska(void); //zwraca 1 dla wolnego, 0 dla zajetego (funkcja stanowiska obslugi)
int dodajZadanie(int zadanie); //1 dla powodzenia, 0 dla przepelnienia
int kolejka?(void); //zwraca 1 dla niepustej kolejki, 0 dla pustej
int liczbaZadan = 0; //aktualna liczba zadan w kolejce
unsigned int poczekalnia[n];
int przeslijZadanie(); //zwraca 1 dla powodzenia, 0 w przypadku bledu
int Send(int zzz); //funkcja stanowiska obslugi

I kilka niezbednych definicji:



int kolejka?(void)
{
	if(liczbaZadan) return 1; else return 0;
}

int przeslijZadanie()
{
	Send(poczekalnia[0]);
	przesunLewo(poczekalnia,n);
	n--;
}

int dodajZadanie(int zadanie)
{
	if(liczbaZadan<n-1) {
		poczekalnia[n] = zadanie; n++
	}
	return 0;
}

int main(void)
{
	while(true) {
		if(kolejka?())
			if(stanStanowiska())
				przeslijZadanie();
}

Ale kod jest niepełny, brakuje funkcji przesuńLewo i kilku innych. Czy mógłby ktoś to zmodyfikować (ew. napisać nowe) tak, abym był w stanie zrozumieć kod?
Dziękuję z góry

0

Ale komentarze są słabe, a ja ogólnie chciałbym się czegoś nauczyć od Was :P

0

Nie ręcze za jakość kodu, bo nie pamiętam kiedy go pisałem :P (ale powinien działać)
Poza tym to C++ a nie C, ale to kwestia kosmetyczna -> zamiast new malloc() i zamiast delete free()

#include <iostream>
using namespace std;

struct Node
{
  Node* next;
  int val;
};

void push(int wartosc, Node*& lista);
int pop(Node*& lista);
bool empty(Node* lista);

int main()
{
  Node* lista = NULL;
  for (int i=0;i<5;i++)
    push(i,lista);
  for (int i=0;i<6;i++)
    cout<<pop(lista)<<" ";

  return EXIT_SUCCESS;
}
/////////////////////////////////////////////////////////////////////////////////
void push(int wartosc,Node*& lista)
{
  Node* el = new Node; //tworzymy nowy element
  el->val=wartosc; //ustawiamy mu wartosc
  el->next=lista; //przyczepiamy do niego cala istniejącą listę
  lista=el; //ustawiamy "głowę" listy na nasz nowy element, czyli dodajemy go na początek
}
/////////////////////////////////////////////////////////////////////////////////
int pop(Node*& lista)
{
  if(!empty(lista)) //jeśli jest z czego zdejmowac
  {
    int retval = lista->val; //zapamiętujemy wartość
    Node* deleter = lista; //zapamiętujemy element do usunięcia
    lista = lista->next; //przestawiamy głowę listy na następny element
    delete deleter; //usuwamy starą głowę
    return retval;
  }
  else //pusty stos!
  {
   cout<<"\nBlad! Pusty stos!"<<endl;
   return 0; //albo wyjątek rzucasz czy cos
  }
}
/////////////////////////////////////////////////////////////////////////////////////
bool empty(Node* lista)
{
 return !lista;
}

Poza tym moze to: http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_linklist.aspx ci się przyda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1