jezv 1 vuosi sitten
commit
9136e9c56e
5 muutettua tiedostoa jossa 114 lisäystä ja 0 poistoa
  1. 1 0
      .gitignore
  2. 65 0
      Chain.h
  3. 36 0
      Node.h
  4. BIN
      main_chain
  5. 12 0
      main_chain.cpp

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+.vscode

+ 65 - 0
Chain.h

@@ -0,0 +1,65 @@
+#include <iostream>
+#include "Node.h"
+
+
+class Chain
+{
+
+    public:
+    void* start;
+    void* end;
+
+    Chain()
+    {
+        start = nullptr;
+        end = nullptr;
+    }
+
+    bool isNull() const
+    {
+        return start == nullptr;
+    }
+
+    template <typename T>
+    void add(T value)
+    {
+        if(start==nullptr) {
+            Node<T> tstart(value);
+            start = &tstart;
+            end = &tstart;
+            return;
+        }
+        Node<T> node(value, static_cast<Node<T>*>(end));
+        static_cast<Node<T>*>(end)->next = &node;
+        end = &node;
+    }
+
+    template <typename T>
+    Node<T> pop()
+    {
+        T value = static_cast<Node<T>*>(end)->value;
+        if(static_cast<Node<T>*>(end)->prev == nullptr)
+        {
+            start = nullptr;
+            end = nullptr;
+            return value;
+        }
+        end = static_cast<Node<T>*>(end)->prev;
+        static_cast<Node<T>*>(end)->next = nullptr;
+        return value;
+    }
+
+    template <typename T>
+    friend std::ostream &operator <<(std::ostream &os, Chain &c)
+    {
+        os << "( ";
+        void* currentNode = c.start;
+        while (static_cast<Node<T>*>(currentNode)->next!=nullptr)
+        {
+            os << *(static_cast<Node<T>*>(currentNode)) << " = ";
+            currentNode = static_cast<Node<T>*>(currentNode)->next;
+        }
+        os << *(static_cast<Node<T>*>(currentNode)) << " )";
+        return os;
+    }
+};

+ 36 - 0
Node.h

@@ -0,0 +1,36 @@
+#include <iostream>
+
+template <typename T>
+class Node
+{
+    public:
+    T value;
+    Node* next;
+    Node* prev;
+
+    Node(){}
+
+    Node(T tvalue)
+    {
+        value = tvalue;
+    }
+
+    Node(T tvalue, Node* tprev)
+    {
+        value = tvalue;
+        prev = tprev;
+    }
+
+    Node(T tvalue, Node* tprev, Node* tnext)
+    {
+        value = tvalue;
+        prev = tprev;
+        next = tnext;
+    }
+
+    friend std::ostream &operator <<(std::ostream &os, Node<T> &nd)
+    {
+        os << nd.value;
+        return os;
+    }
+};

BIN
main_chain


+ 12 - 0
main_chain.cpp

@@ -0,0 +1,12 @@
+#include "Chain.h"
+#include <iostream>
+
+using namespace std;
+
+int main()
+{
+    Chain c;
+    c.add(11);
+    c.add(12);
+    cout << c << endl;
+}