algorytmy lista dwukierunkowa, WAT, SEMESTR II, ALS


#include <iostream.h>

#include <stdlib.h>

#include <stdio.h>

class lista{

private:

char dane[20];

lista *head;

lista *next;

lista *curr;

lista *prev;

public:

lista(void);

void dodaj(char *,int);

void Put(char *a);

int nastepny(void);

char* odczyt(void);

void poczatek(void);

int ilosc_el(void);

int poprzedni(void);

int ustaw(int gdzie);

void usun(int ktory);

};

/***********konstruktor*************************/

lista::lista(void)

{

head=NULL;

next=NULL;

prev=NULL;

curr=NULL;

}

/************ wstawia dane **********************/

void lista::Put(char *a)

{

int i=0;

while((a[i]=='\n')||(i<20))

{

dane[i]=a[i++];

}

dane[i]='\n';

}

/************ przesuwa sie na nastepny **********/

int lista::nastepny(void)

{

if(curr->next)

{

curr=curr->next;

return 1;

}

else {

return 0;

}

}

/*********** przesuwa sie na poprzedni *********/

int lista::poprzedni(void)

{

if(curr->prev)

{

curr=curr->prev;

return 1;

}

else return 0;

}

/*********** odczyt danych ********************/

char* lista::odczyt(void)

{

return curr->dane;

}

void lista::poczatek(void)

{

curr=head;

}

/*********** zwraca ilosc elementow ***********/

int lista::ilosc_el(void)

{

int ilosc=0;

lista *temp;

temp=curr;

curr=head;

do

{

ilosc++;

}

while(nastepny());

curr=temp;

return ilosc;

}

/****************************************************/

void lista::dodaj(char *tekst,int miejsce)

{

lista *a=new lista(); // tworzymy nowy obiekt

a->Put(tekst); // umieszczamy w nim tekst

lista *wsk;

if(miejsce==1 && curr==NULL) //jesli lista byla pusta

{

a->prev=NULL;

a->next=NULL;

head=a;

curr=a;

}

else if(miejsce>this->ilosc_el()) // jesli wstawiamy na koniec listy

{

this->ustaw(miejsce-1);

curr->next=a;

a->prev=curr;

a->next=NULL;

}

else

{

this->ustaw(miejsce);

wsk=curr;

if(this->poprzedni())

{

curr->next=a;

a->prev=curr;

}

else {

head=a;

a->prev=NULL;

}

curr=wsk;

if(wsk)

{

a->next=wsk;

wsk->prev=a;

}

else a->next=NULL;

}

this->ustaw(this->ilosc_el()); // ustawiam sie na ostatnim elemencie

}

/***************************** usuwanie elementu z listy ***********************/

void lista::usun(int ktory)

{

ustaw(ktory);

if(curr->prev)

{

curr->prev->next=curr->next;

}

else head=curr->next;

if(curr->next)

{

curr->next->prev=curr->prev;

curr=curr->next;

}

if(!curr->next && !curr->prev)

{

head=curr=next=prev=NULL;

}

}

/***************************** ustawia sie na okreslonym elemencie *************/

int lista::ustaw(int gdzie)

{

this->poczatek();

int i=1;

do

{

if(i==gdzie) return 1;

i++;

}while(this->nastepny());

return 0;

}

/***********************************************************************************/

void rysuj(void)

{

system("clear");

cout << "************************** LISTA ***********************************\n\n";

cout << "1. kolejen wstawianie \n";

cout << "2. wybor miejsca wstawienia\n";

cout << "3. pokaz liste \n";

cout << "4. usun element\n";

cout << "5. KONIEC \n";

}

/****************** program glowny *********************************************/

int main()

{

lista A;

int z=1;

char t[20];

int odp;

int place;

do

{

rysuj();

cin >> odp;

switch(odp)

{

case 1 :

cout << "Podaj tekst dla "<< z << " pola :" << endl;

//getchar();

cin.getline(t,sizeof(t));

A.dodaj(t,z);

z++;

break;

case 2: cout << " Podaj wartosc : " ;

getchar();

cin.getline(t,sizeof(t));

cout << " Podaj miejsce, w ktore chcesz wstawic obiekt : " ;

cin >> place;

A.dodaj(t,place);

z++;

break;

case 3: { A.poczatek();

cout << " zawartosc listy : " ;

do

{

cout << A.odczyt() << ", ";

}

while(A.nastepny());

cout << endl;

getchar();

break;

}

case 4: { cout << " Ktory element chcesz usunac ? : ";

cin >> place;

A.usun(place);

z--;

break;

}

}

cout << "nacisnij ENTER";

getchar();

rysuj();

}while(odp!=5);

return 0;

}



Wyszukiwarka

Podobne podstrony:
algorytmy kolejka, WAT, SEMESTR II, ALS
Lab3, WAT, SEMESTR II, ALS
Zadania na zaliczenie I8X2S1, WAT, SEMESTR II, ALS
Sylabus AiSD Studia Stacjonarne, WAT, SEMESTR II, ALS
PTK cw4, WAT, SEMESTR II, PTK
PA lab cw4, WAT, SEMESTR II, WDA, Wstep do Automatyki-matlab, mathlab
wda trojan lab8, WAT, SEMESTR II, WDA
wda 6 sprawko, WAT, SEMESTR II, WDA
WDA 2, WAT, SEMESTR II, WDA
wda sprawko nr4, WAT, SEMESTR II, WDA
wda sprawko lab5 wooka, WAT, SEMESTR II, WDA
Miudpts prezentacje lista, Studia, AiR, SEMESTR II, Miudpts
T6 pytania - opracowanie, WAT, SEMESTR II, PTK
rozwiazania, WAT, SEMESTR II, WDA
Wda lab1 sprawko, WAT, SEMESTR II, WDA
wda sprawko 3, WAT, SEMESTR II, WDA
PA lab cw3, WAT, SEMESTR II, WDA, Wstep do Automatyki-matlab, mathlab
WDA sprawozdanie1, WAT, SEMESTR II, WDA
WDA Lab 6, WAT, SEMESTR II, WDA

więcej podobnych podstron