smgr

elso_cpp

Feb 19th, 2015
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. /* (c) Gergo Simko */
  2. /*
  3. * fordit.c
  4. * Egész számokat olvas be egy listába, majd fordított
  5. * sorrendben kiírja azokat.
  6. */
  7.  
  8. #ifdef _MSC_VER
  9.     #define _CRT_SECURE_NO_WARNINGS 1
  10. #endif
  11.  
  12. #include <iostream>
  13. #include "memtrace.h"
  14.  
  15. struct lancElem {
  16.     int adat;                   // egész adat
  17.     double dummy[1000];         // teszteléshez kell, ne törölje!
  18.     lancElem *kov;      // pointer a következő láncelemre
  19. };
  20.  
  21. /*
  22. * Felvesz egy uj elemet és a lista elejére fűzi.
  23. * @param p - lista jelenlegi eleje
  24. * @param i - új adat
  25. * @return lista elejére mutató pointer. Hiba esetén NULL
  26. */
  27. lancElem *befuz(lancElem *p, int i) {
  28.     lancElem *uj = new lancElem;    // új elem felvétele
  29.     if (uj != NULL) {   // ha nincs hiba
  30.         uj->adat = i;   // új adat
  31.         uj->kov = p;    // lista elejére teszi
  32.     }
  33.     return uj;
  34. }
  35.  
  36. /*
  37. * Kiírja a listát.
  38. * @param p - lista eleje
  39. */
  40. void kiir(lancElem *p) {
  41.     while (p != NULL) {                     // amig el nem érjük a végét
  42.         std::cout << p->adat << std::endl;  // adat kiírása
  43.         p = p->kov;                         // következő elemre
  44.     }
  45. }
  46.  
  47. /*
  48. * Felszabadítja a listát.
  49. * @param p - lista eleje
  50. */
  51. void felszabadit(lancElem *p) {
  52.     lancElem *i = p;
  53.     while (i != NULL) {
  54.         lancElem *temp = i->kov; /* következő elem */
  55.         delete i;
  56.         i = temp;
  57.     }
  58.     i = NULL;
  59. }
  60.  
  61.  
  62. int main(void) {
  63.  
  64.     lancElem *kezdo = NULL;             // üres lista
  65.     int x;
  66.  
  67.     while (std::cin >> x) {             // amíg van helyes input
  68.         try {
  69.             lancElem *tmp = befuz(kezdo, x);// befűzzük
  70.             kezdo = tmp;
  71.         } catch (const std::bad_alloc&) {
  72.             std::cerr << "Nagy a baj: nincs elég memória" << std::endl;
  73.             felszabadit(kezdo);
  74.             return 1;
  75.         }
  76.     }
  77.  
  78.     kiir(kezdo);                        // kiírjuk
  79.  
  80.     felszabadit(kezdo);                 // felszabadítja a listát
  81.  
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment