Advertisement
a53

Coada1

a53
Aug 20th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. using namespace std;
  5. ifstream cin("coada1.in");
  6. ofstream cout("coada1.out");
  7. struct nod
  8. {
  9. int x;
  10. nod *urm;
  11. };
  12. typedef nod NOD;
  13. NOD *prim,*ultim,*p;
  14. int n,X;
  15. char op[5];
  16.  
  17. void push(int X) // Adauga valoarea intreaga X in coada
  18. {
  19. NOD *q;
  20. if(prim==NULL) // Coada e vida => se adauga primul element
  21. {
  22. prim=(NOD*)malloc(sizeof(NOD));
  23. prim->x=X;
  24. prim->urm=NULL;
  25. ultim=prim;
  26. }
  27. else // Daca X exista deja in coada, se scot toate elementele din coada,
  28. // pana la intalnirea lui, inclusiv X
  29. {
  30. p=prim;
  31. int ok=0;
  32. while(p!=NULL)
  33. {
  34. if(p->x==X)
  35. {
  36. ok=1;
  37. break;
  38. }
  39. p=p->urm;
  40. }
  41. p=prim;
  42. if(ok)
  43. {
  44. while(p->x!=X)
  45. q=p,p=p->urm,free(q);
  46. if(p!=ultim)
  47. q=p,p=p->urm,free(q);
  48. prim=p;
  49. }
  50. if(ultim->x!=X)
  51. {
  52. p=(NOD*)malloc(sizeof(NOD));
  53. p->x=X;
  54. p->urm=NULL;
  55. ultim->urm=p;
  56. ultim=p;
  57. }
  58. }
  59. }
  60.  
  61. void query(int X) // Afiseaza pozitia elementului X in coada
  62. {
  63. int nr=0,ok=0;
  64. p=prim;
  65. while(p!=NULL)
  66. {
  67. nr++;
  68. if(p->x==X)
  69. {
  70. cout<<nr<<'\n',ok=1;
  71. break;
  72. }
  73. p=p->urm;
  74. }
  75. if(!ok)
  76. cout<<-1<<'\n';
  77. }
  78.  
  79. int main()
  80. {
  81. cin>>n;
  82. cin.get();
  83. for(int i=1;i<=n;i++)
  84. {
  85. cin>>op;
  86. cin>>X;
  87. if(strcmp(op,"push")==0)
  88. push(X);
  89. if(strcmp(op,"query")==0)
  90. query(X);
  91. }
  92. return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement