CPP   14

List cpp

Guest on 5th July 2022 05:08:41 PM

  1. // file: List.cpp
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. // List prototype
  6. template<typename T> class List;
  7.  
  8. // Node
  9. template<typename T>
  10. class Node
  11. {
  12.    friend class List<T>;
  13.  
  14.    public:
  15.       Node(T x) {data = x; next=0;};
  16.       ~Node() {};
  17.  
  18.    private:
  19.       T data;
  20.       Node<T>* next;
  21. };
  22.  
  23. // List
  24. template<typename T>
  25. class List
  26. {
  27.    public:
  28.       List() {length=0; head=0, tail=0;};
  29.       ~List() {while(length>0) deleteFirst();};
  30.  
  31.       // operations on List<T>
  32.       void appendToLast(T x);
  33.       void deleteFirst();
  34.       void print();
  35.  
  36.    private:
  37.       int length;
  38.       Node<T>* head;
  39.       Node<T>* tail;
  40. };
  41.  
  42. // List<T>::appendToLast()
  43. // appends N to tail of list.
  44. template<typename T>
  45. void List<T>::appendToLast(T x)
  46. {
  47.    Node<T>* N = new Node<T>(x);
  48.  
  49.    if(length==0) // List is empty.
  50.    {
  51.       head=tail=N;
  52.    }
  53.    else
  54.    {
  55.       tail->next = N;
  56.       tail=N;
  57.    }
  58.       length++;
  59. }
  60.  
  61. // List<T>::deleteFirst()
  62. // deletes head of List
  63. // Pre : length != 0
  64. template<typename T>
  65. void List<T>::deleteFirst()
  66. {
  67.    if(length==0) // List is empty
  68.    {
  69.       cout << "Error: calling deleteFirst() on empty List" << endl;
  70.       exit(1);
  71.    }
  72.  
  73.    if(length==1)
  74.    {
  75.       delete head;
  76.       head = tail = 0;
  77.    }
  78.    else
  79.    {
  80.       Node<T>* N = head;
  81.       head = head->next;
  82.       delete N;
  83.    }
  84.    length--;
  85. }
  86.  
  87. // List<T>::print()
  88. // prints the data field for each Node
  89. template<typename T>
  90. void List<T>::print()
  91. {
  92.    Node<T>* N=head;
  93.  
  94.    while(N!=0)
  95.    {
  96.       cout << N->data << " " ;
  97.       N = N->next;
  98.    }
  99.    cout << endl;
  100. }
  101.  
  102. int main()
  103. {
  104.    List<string> L;
  105.  
  106.    L.appendToLast("one");
  107.    L.appendToLast("two");
  108.    L.print();
  109.    L.appendToLast("three");
  110.    L.appendToLast("four");
  111.    L.deleteFirst();
  112.    L.print();
  113.    L.deleteFirst();
  114.    L.deleteFirst();
  115.    L.deleteFirst();
  116.    // L.deleteFirst();  // error!
  117.    L.print();
  118.    L.appendToLast("five");
  119.    L.print();
  120.  
  121.    return 0;
  122. }
  123.  
  124.  
  125.  
  126. // output:
  127. // one two
  128. // two three four
  129. //
  130. // five

Raw Paste


Login or Register to edit or fork this paste. It's free.