Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- #include <cstdlib>
- using namespace std;
- ifstream cin("coada1.in");
- ofstream cout("coada1.out");
- struct nod
- {
- int x;
- nod *urm;
- };
- typedef nod NOD;
- NOD *prim,*ultim,*p;
- int n,X;
- char op[5];
- void push(int X) // Adauga valoarea intreaga X in coada
- {
- NOD *q;
- if(prim==NULL) // Coada e vida => se adauga primul element
- {
- prim=(NOD*)malloc(sizeof(NOD));
- prim->x=X;
- prim->urm=NULL;
- ultim=prim;
- }
- else // Daca X exista deja in coada, se scot toate elementele din coada,
- // pana la intalnirea lui, inclusiv X
- {
- p=prim;
- int ok=0;
- while(p!=NULL)
- {
- if(p->x==X)
- {
- ok=1;
- break;
- }
- p=p->urm;
- }
- p=prim;
- if(ok)
- {
- while(p->x!=X)
- q=p,p=p->urm,free(q);
- if(p!=ultim)
- q=p,p=p->urm,free(q);
- prim=p;
- }
- if(ultim->x!=X)
- {
- p=(NOD*)malloc(sizeof(NOD));
- p->x=X;
- p->urm=NULL;
- ultim->urm=p;
- ultim=p;
- }
- }
- }
- void query(int X) // Afiseaza pozitia elementului X in coada
- {
- int nr=0,ok=0;
- p=prim;
- while(p!=NULL)
- {
- nr++;
- if(p->x==X)
- {
- cout<<nr<<'\n',ok=1;
- break;
- }
- p=p->urm;
- }
- if(!ok)
- cout<<-1<<'\n';
- }
- int main()
- {
- cin>>n;
- cin.get();
- for(int i=1;i<=n;i++)
- {
- cin>>op;
- cin>>X;
- if(strcmp(op,"push")==0)
- push(X);
- if(strcmp(op,"query")==0)
- query(X);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement