algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Kolejka - Implementacja w C/C++
Ocena użytkownikóww: *****  / 11
SłabyŚwietny
Nadesłany przez Marian, 24 lutego 2011 18:37
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

kolejka_2_c.cpp:
//kolejka (implementacja przy uzyciu listy dwukierunkowej)
//www.algorytm.org

#include<iostream>
using namespace std;

struct element
{
	int liczba; 
	element *nastepny; // wskaznik na nastepny element
	element *poprzedni; // wskaznik na poprzedni element
};

int main()
{
	element *wierzcholek_kolejki = NULL; // lista jest pusta
	element *koniec_kolejki = NULL; // lista jest pusta
	element *pomoc = NULL; // wskaznik pomocniczy
	cout << "Podaj jedna z instrukcji:\n"
		 << "d liczba - aby dodac liczbe do kolejki\n"
		 << "u - aby usunac liczbe z kolejki\n"
		 << "w - aby wyswietlic zawartosc kolejki\n"
		 << "CTRL+Z - aby zakonczyc\n";
	char instrukcja;
	while (cin >> instrukcja)
	{
		switch (instrukcja)
		{
		case 'd':
			pomoc = new element; // tworzymy nowy obiekt
			cin >> pomoc->liczba;
			if (wierzcholek_kolejki == NULL) // jezeli kolejka jest pusta
			{
				pomoc->nastepny = pomoc->poprzedni = NULL;
				koniec_kolejki = wierzcholek_kolejki = pomoc; // poczatek i koniec kolejki jest tym samym elementem
			}
			else
			{
				pomoc->nastepny = NULL;
				koniec_kolejki->nastepny = pomoc; // dodajemy element na koniec wiec, ustawiamy wskaznik na niego w elemencie, ktory byl ostatni
				pomoc->poprzedni = koniec_kolejki; // poprzednikiem nowego elementu jest dotychczasowy ostatni element
				koniec_kolejki = pomoc; // ustawiamy koniec kolejki na nowym elemencie
			}
			break;
		case 'u':
			if (wierzcholek_kolejki != NULL)
			{
				pomoc = wierzcholek_kolejki; // ustawiamy pomoc na wierzcholek kolejki
				if (wierzcholek_kolejki == koniec_kolejki) // jezeli jest tylko jeden element w kolejce
					wierzcholek_kolejki = koniec_kolejki = NULL; // to teraz kolejka bedzie usta
				else // jezeli jest wiecej elementow
					wierzcholek_kolejki = wierzcholek_kolejki->nastepny; // przestawiamy wierzcholek na drugi element (pierwszy musimy usunac)
				delete pomoc; // usuwamy element ze szczytu kolejki
			}
			else
				cout << "Kolejka jest pusta\n";
			break;
		case 'w':
			if (wierzcholek_kolejki != NULL)
			{
				cout << "Zawartosc kolejki:\n";
				pomoc = wierzcholek_kolejki;
				while (pomoc != NULL) // dopoki pokazujemy na jakis element kolejki (listy)
				{
					cout << pomoc->liczba << " ";
					pomoc = pomoc->nastepny; // przechodzimy na nastepny element na liscie
				}
			}
			else
				cout << "Kolejka jest pusta";
			cout << endl;
			break;
		default:
			cout << "Musisz wybrac jedna z instrukcji:\nd - aby dodac element do kolejki, "
				 << "u - aby usunac element z kolejki lub w - aby wyswietlic zawartosc kolejki\n";
			break;
		}
	}

	return 0;
}
Dodaj komentarz