Advertisement
Guest User

lalki povara

a guest
Jul 6th, 2015
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <stdexcept>
  4.  
  5. template <typename T>
  6. class List {
  7. public:
  8.     List();
  9.     void push_back(const T &data);
  10.     void pop_back();
  11.     unsigned int size();
  12.     T back();
  13.     T front();
  14.  
  15. private:
  16.     template <typename X>
  17.     struct Node {
  18.         X data;
  19.         Node *next;
  20.         Node(const X &data, const Node *next) : data(data), next(next) {}
  21.         Node(const X &data) : data(data), next(NULL) {}
  22.     };
  23.     Node <T> *head;
  24.     Node <T> *tail;
  25.     unsigned int length;
  26. };
  27.  
  28. template <typename T>
  29. List <T>::List(): head(NULL), tail(NULL), length(0) { }
  30.  
  31. template <typename T>
  32. void List <T>::push_back(const T &data) {
  33.     if (!head) {
  34.         head = new Node <T>(data);
  35.         tail = head;
  36.     }
  37.     else {
  38.         tail->next = new Node<T>(data);
  39.         tail = tail -> next;
  40.     }
  41.     length += 1;
  42. }
  43.  
  44. template <typename T>
  45. unsigned int List <T>::size() {
  46.     return length;
  47. }
  48.  
  49. template <typename T>
  50. void List <T>::pop_back() {
  51.     if (!tail) {
  52.         throw std::out_of_range("Can't get data from empty list");
  53.     }
  54.     if (head == tail) {
  55.         delete head;
  56.         head = NULL;
  57.         tail = NULL;
  58.     } else {
  59.         Node <T> *penult = head;
  60.         while (penult->next != tail) {
  61.             penult = penult -> next;
  62.         }
  63.         tail = NULL;
  64.         tail = new Node <T>(penult -> data);
  65.     }
  66.     length--;
  67.     return;
  68. }
  69.  
  70. template <typename T>
  71. T List <T>::back() {
  72.     if (!tail) {
  73.         throw std::out_of_range("Can't get data from empty list");
  74.     } else {
  75.         return tail -> data;
  76.     }
  77. }
  78.  
  79. template <typename T>
  80. T List <T>::front() {
  81.     if (!tail) {
  82.         throw std::out_of_range("Can't get data from empty list");
  83.     } else {
  84.         return head -> data;
  85.     }
  86. }
  87.  
  88. int main() {
  89.     List <int> a;
  90.     a.push_back(2);
  91.     a.push_back(3);
  92.     std::printf("%d", a.back());
  93.     std::printf("%d", a.front());
  94.     a.pop_back();
  95.     std::printf("%d", a.back());
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement