Sunteți pe pagina 1din 17

Institutul Rosario Castellanos

Structură de date

Experiență de învățare:
Structuri liniare de date pt
depanare: liste, stive și cozi

LAITI301B1O_21-2

Cadouri
Fabián Antonio Osorio García

profesor
FRANCISCO JACOB AVILA CAMACHO

Mexico City

septembrie 2021

1
Experiență de învățare: Structuri liniare de date pentru rezolvarea
problemelor: liste, stive și cozi
Scop:

Incident critic

Reveniți la contextul descris de problema prototipică în care sunteți un tânăr


antreprenor care și-a propus dezvoltarea unei soluții IT care să permită
persoanelor care doresc să călătorească în același loc în același timp să se
organizeze pentru a călători împreună.

În primul pas, trebuie să definim și să stocăm datele de bază de care vom avea
nevoie pentru ca un utilizator să poată solicita o călătorie folosind aplicația noastră
„Ecoviaje”.

Ceea ce trebuie să faceți este să creați structura de date (Solicitare) care vă


permite să definiți și să stocați informațiile de bază necesare unui utilizator pentru a
solicita o călătorie.

Pentru a simplifica problema, vom lua în considerare doar următoarele atribute:

• Originea: orașul de origine (de exemplu, Puebla).

• destinație: oraș de destinație (de exemplu, CDMX).

• utilizator: ID utilizator (de exemplu, jperez)

Cum vei face această cerere?

Indicatii

Această activitate va fi împărțită în două momente:

Primul moment

2
1. Citiți cu atenție conținutul unității.

2. Alegeți între alternativele de implementare a unei structuri de date de tip


listă, List Requests care vă permite să stocați toate cererile pe baza unei
singure liste sau a unei liste duble și explicați de ce ați ales acea
implementare (justificați-o)

3. Integrați aceste informații într-un document text cu următoarea


nomenclatură LAIT301_ U2_EA_nume patern_nume.

S-a decis să se utilizeze liste simple deoarece ar fi necesară numai inserarea


ordonată în ordinea intrării în listele A și B. În acest fel, nu este necesar să ocupăm
o listă dublă deoarece nu am introduce elemente din spate sau nu am efectua
traversări de elemente, inserarea ar fi doar dintr-o parte, ca și cum ar fi o coadă.

Al doilea moment

4. Creați o clasă sau o funcție pentru a gestiona solicitările de călătorie Share


Vehicle și o clasă sau o funcție pentru a stoca toate solicitările Listați
solicitările folosind limbajul de programare și software-ul ales de dvs. (Dacă
aveți îndoieli, consultați informațiile cu profesorul dvs.)

Clasa sau funcția de cotă de vehicule trebuie să implementeze/efectueze


următoarele metode sau operațiuni:

a) îmbină Solicitări care primesc ca parametri două obiecte/date de tip Lista Cereri.

Funcția sau metoda trebuie să returneze un obiect de tip Lista Cereri al cărui
conținut sunt elementele ambelor liste de intrare alternativ, adică în aceeași ordine,
dar integrând câte un element din fiecare listă.

Să vedem un exemplu cu litere:

Lista 1: {A, C, D, E, F, G}

3
Lista 2: {B, J}

Rezultatul solicitărilor de fuziune: {A, B, C, J, D, E, F, G}

b) Share, care primește ca parametri două obiecte sau date de tip Requests List, și
care returnează un obiect de tip Requests List cu toate solicitările din ambele liste
de intrare, ale căror orașe de origine sunt aceleași, precum și orașele de destinație
ale acestora.

De exemplu, dacă A este o cerere care se află în prima listă, cu orașul de origine
Puebla și destinația CDMX, iar la rândul său B este o cerere din a doua listă, tot cu
originea Puebla și destinația CDMX, ambele cereri, A și B, Ele trebuie să fie în lista
returnată de metodă sau funcție.

Program conceput:

#include<iostream>
#include<string.h>
#definiți adevărat 1
#definiți fals 0
folosind namespace std;

solicitări typedef struct


{
originea char[20];
destinație char[20];
char id[20];
}Aplicație;

typedef struct{
Solicitare S[1000];

4
int ultimul;
}Listă;

void initialize(Lista &l);


void insert(Lista *l,Solicitare S);
void share(Lista &A,Lista &B,Lista *C,Solicitarea S);
void print(Lista l);
void void(Lista &l);

int main()
{
Lista A,B,C;
Solicitare Aux;
int opt,retur;

initialize(A);
initialize(B);
initialize(C);

do{
cout<<"\n\t\tSolicitare liste"<<endl;
cout<<"\n\t1 - Inserați în lista A";
cout<<"\n\t2 - Inserați în lista B";
cout<<"\n\t3 - Partajați liste";
cout<<"\n\t4 - Ștergeți lista A";
cout<<"\n\t5 - Șterge lista B";
cout<<"\n\t6 - Afișează liste";
cout<<"\n\t0 - Ieșiți din program";
cout<<"\n\tSelectați opțiunea: ";
cin>>opt;
fflush(stdin);

5
if(opc==1||opc==2||opc==3)
{
dacă(opt==3)
{
cout<<"Introduceți Sursa și destinația care vor partaja lista de
solicitări";
}
cout<<"\nIntroduceți originea:";
cin>>aux.origin;
cout<<"\nIntroduceți destinația:";
cin>>aux.destination;
dacă (optați!=3)
{
cout<<"\nIntroduceți ID:";
cin>>aux.id;
}
altfel
{
strcpy(aux.id,"NULL");
}
}

comutați(optați){
cazul 1:
insert(&A,aux);
cout<<"\nLIST TO:";
print(A);
pauză;
cazul 2:
insert(&B,aux);
cout<<"\nLISTA B:";

6
imprimare(B);
pauză;
cazul 3:
initialize(C);
share(A,B,&C,aux);
pauză;
cazul 4:
gol (A);
pauză;
cazul 5:
gol (B);
pauză;
cazul 6:
cout<<"\nLIST TO:";
print(A);
cout<<"\nLISTA B:";
imprimare(B);
cout<<"\nLISTA C:";
imprimare(C);
pauză;
Mod implicit:
dacă(opt==0){
cout<<"\n\t\tIeși din program. La revedere!!\n\n";
returnează 0;
}
altfel{
cout<<"\n\t\t** Opțiune în afara intervalului. Încearcă din nou. **\
n"<<endl;
}
pauză;

7
}
}while(opt);

returnează 0;
}

void initialize(Lista &l){


l.ultimul = -1;
}

void insert(Lista *l,Solicitare S){


int i;
dacă(l->ultimul==-1)
{
l->ultimul = 0;
}
strcpy(l->S[l->last].destination,S.destination);
strcpy(l->S[l->last].origin,S.origin);
strcpy(l->S[l->last].id,S.id);
l->last++;
cout<<"\n\tA fost introdus:"<<S.id<<endl;
}

void print(Lista l){


int i = 0;
dacă(l.last==-1)
{
cout<<"\n\tLista goală."<<endl;
întoarcere;
}

8
în timp ce(i<l.last){
cout<<"\n"<<"ID:"<<lS[i].id<<" O:"<<lS[i].origine<<" D:"<<lS[i].destinație< <<\
n"<<endl;
i=i+1;
}
}

void void(Lista &l){


if(l.last = -1){
cout<<"\n\tToate elementele au fost șterse."<<endl;
}
altfel{
cout<<"\n\tNu există elemente în listă."<<endl;
}
}
void share(Lista &A,Lista &B,Lista *C,Solicitarea S)
{
int i=0,j=0,turn=1,turns,t=0;

viraje = A.ultimul + B.ultimul;

în timp ce(t<turns)
{
if(turn == 1)//REVUZI LISTA A
{

if(strcmp(AS[i].origin,S.origin)==0&&strcmp(AS[i].destination,S.destination)==0)
{
insert(C,AS[i]);

9
turn = 2;
}
i++;

}
else // REVIZIONARE LISTA B
{

if(strcmp(BS[j].origin,S.origin)==0&&strcmp(BS[j].destination,S.destination)==0)
{
insert(C,BS[j]);
shift = 1;
}
j++;
}
t++;
if(i==A.last&&j<B.last)
{
shift=2;
}
if(j==B.last&&i<A.last)
{
shift=1;
}

10
11
12
13
14
15
16
17

S-ar putea să vă placă și