From 1735ce708babf148ca19da06acac3c64fdeaea81 Mon Sep 17 00:00:00 2001 From: mooophy Date: Thu, 4 Dec 2014 17:39:10 +1300 Subject: [PATCH] modified: assignment2/as2/as2.pro modified: assignment2/as2/main.cpp --- assignment2/as2/as2.pro | 1 + assignment2/as2/main.cpp | 68 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/assignment2/as2/as2.pro b/assignment2/as2/as2.pro index c3348d2..a1f721f 100644 --- a/assignment2/as2/as2.pro +++ b/assignment2/as2/as2.pro @@ -2,6 +2,7 @@ TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt +CONFIG += c++11 SOURCES += main.cpp diff --git a/assignment2/as2/main.cpp b/assignment2/as2/main.cpp index 5f5419b..e3937ec 100644 --- a/assignment2/as2/main.cpp +++ b/assignment2/as2/main.cpp @@ -1,10 +1,74 @@ #include +#include + + +namespace ads { + +template struct Node +{ + Data value; + Node* next; +}; + +template +class List +{ +public: + using DataType = decltype(Node::Data); + + List() = default; + + void push_front(DataType const& new_data) + { + do_push_front(new_data); + } + + DataType const& front()const + { + return head_->value; + } + + void pop() + { + do_pop(); + } + + bool empty()const + { + return !head_ and !tail_; + } + +private: + Node* head_{nullptr}; + Node* tail_{nullptr}; + std::size_t size_{0}; + + void do_push_front(DataType const& new_data) + { + if(empty()) + head_ = tail_ = new Node{new_data, nullptr}; + else + head_ = new Node{new_data, head_}; + ++size_; + } + + void do_pop() + { + if(empty()) + throw std::runtime_error{"underflow!"}; + head_ =head_->next; + --size_; + } +}; + + + +}//namespace -using namespace std; int main() { - cout << "Hello World!" << endl; + ads::List> l; return 0; }