stos template + class node

czyli trochę strukturalne podejście do problemu stosu ;D
no i w sumie to już ostatnia implementacja, może kiedyś będą jeszcze jakieś.
klik:


Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. template <class T> class node{
  7. T value;
  8. node *prev;
  9. public:
  10. node(T & val, node * p){value=val; prev = p;}
  11. T& vnode(){return value;}
  12. node *pnode(){return prev;}
  13. };
  14.  
  15. template <class T> class stos{
  16. int Size;
  17. node<T> *wsk;
  18. public:
  19. stos(){Size=0; wsk=NULL;}
  20. ~stos(){
  21. while (wsk) {
  22. node<T> *temp=wsk;
  23. wsk=temp->pnode();
  24. delete temp;}
  25. }
  26. bool empty(){return Size==0;}//pusty
  27. int size(){return Size;} //rozmiar
  28. T& top(){return wsk->vnode();} //najwyższy element stosu
  29. void push(T& v){ //połóż na szczycie
  30. node<T>*temp=wsk;
  31. wsk=new node<T>(v,temp);
  32. Size++;
  33. }
  34. void pop(){ //zdejmij ze stosu
  35. if(empty()) return;
  36. node<T> *temp=wsk;
  37. wsk=temp->pnode();
  38. delete temp;
  39. Size--;
  40. }
  41. };
  42.  
  43. int menu()
  44. {
  45. cout<<"\n......:::::MENU:::::......\n"<<endl;
  46. cout<<"1. Sprawdz czy stos jest pusty."<<endl;
  47. cout<<"2. Sprawdz rozmiar stosu."<<endl;
  48. cout<<"3. Najwyzszy element stosu"<<endl;
  49. cout<<"4. Dodaj element do stosu"<<endl;
  50. cout<<"5. Usun element ze stosu"<<endl;
  51. cout<<"6. Zakoncz program."<<endl;
  52. int a;
  53. cin>>a;
  54. return a;
  55. }
  56.  
  57.  
  58.  
  59.  
  60.  
  61. int main()
  62. {
  63. bool run = true;
  64. stos<int> s;
  65.  
  66. while(run)
  67. {
  68. switch(menu())
  69. {
  70. case 1:
  71. {
  72. if(s.empty())
  73. {
  74. cout<<"stos jest pusty."<<endl;
  75. }
  76. else
  77. {
  78. cout<<"stos nie jest pusty."<<endl;
  79. }
  80. break;
  81. }
  82. case 2:
  83. {
  84. cout<<"Rozmaiar stosu: "<<s.size()<<endl;
  85. break;
  86. }
  87. case 3:
  88. {
  89.  
  90. if(s.empty())
  91. {
  92. cout<<"stos jest pusty."<<endl;
  93. }
  94. else
  95. {
  96. cout<<"Najwyzszy element na stosie: "<<s.top()<<endl;
  97. }
  98. break;
  99. }
  100. case 4:
  101. {
  102. int i;
  103. cout<<"Podaj liczbe jaka chcesz umiescic na stosie:"<<endl;
  104. cin>>i;
  105. s.push(i);
  106. break;
  107. }
  108. case 5:
  109. {
  110. if(!s.empty())
  111. {
  112. s.pop();
  113. }
  114. else
  115. {
  116. cout<<"Nie mozna usunac elementu ze stosu poniewaz stos jest pusty."<<endl;
  117. }
  118. break;
  119. }
  120. case 6:
  121. {
  122. run = false;
  123. break;
  124. }
  125. };
  126. }
  127.  
  128. return 0;
  129. }

Komentarze

Popularne posty z tego bloga

[c++] Lista wskaznikowa

[c++] słowniki - haszowanie - haszowanie otwarte

[ANSI C][LINUX] Wysyłanie i obsługa sygnałów