Programming Assignment 2 Lists, Stack, and Queue

$24.99 $18.99

Approved Includes Task 1: Array List Implement a list using an array. Requirements Files array_list.h – contains the template definitions array_list_tests.cpp – contains the test cases and test driver (main) Class template <typename Object> class ArrayList; Functions (public) ArrayList() – makes an empty list explicit ArrayList(size_t) – makes a list with the specified initial capacity…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Description

5/5 – (2 votes)

Approved Includes

Task 1: Array List

Implement a list using an array.

Requirements

Files

array_list.h – contains the template definitions

array_list_tests.cpp – contains the test cases and test driver (main)

Class

template <typename Object>

class ArrayList;

Functions (public)

ArrayList() – makes an empty list

explicit ArrayList(size_t) – makes a list with the specified initial capacity

+–Rule of Three————————————————-+

| ArrayList(const ArrayList&) – constructs a copy of the given list |

| ~ArrayList() – destroys this list |

| ArrayList& operator=(const ArrayList&) – assigns a copy of the given list |

+—————————————————————-+

size_t size() const – returns the number of elements in the list

Object& operator[](size_t) – returns a reference to the element at the specified index or throws std::out_of_range if the index is out of bounds.

void insert(size_t, const Object&) – insert the given object at the specified index or throws std::out_of_range if the index is out of bounds

void remove(index) – remove the object at the specified index or throws std::out_of_range if the index is out of bounds

Optional

ArrayList(ArrayList&&) – move-constructs a “copy” of the given (rvalue) list ArrayList& operator=(ArrayList&&) – move-assigns a “copy” of the given (rvalue) list void insert(size_t, Object&&) – insert the given (rvalue) object at the specified index or throws std::out_of_range if the index is out of bounds

const Object& operator[](size_t) const – returns a constant reference to the element at the specified index or throws std::out_of_range if the index is out of bounds. Object* begin() returns a pointer to the beginning of the list

const Object* begin() const returns a pointer to the beginning of the list

Object* end() returns a pointer to the end of the list

const Object* end() const returns a pointer to the end of the list

Example

  • make an empty list ArrayList<int> list;

  • insert 3 values at the end of the list list.insert(0, 1);

list.insert(1, 2); list.insert(2, 3);

  • get the size

size_t size = list.size();

  • remove the middle element list.remove(1);

  • access the element at index 1 int value = list[1];

Task 2: Doubly Linked List

Implement a list using a doubly linked list.

Requirements

Files

doubly_linked_list.h – contains the template definitions

doubly_linked_list_tests.cpp – contains the test cases and test driver (main)

Class

template <typename Object>

class DoublyLinkedList;

Functions (public)

DoublyLinkedList() – makes an empty list

+–Rule of Three—————————————————–+

| DoublyLinkedList(const DoublyLinkedList&) – constructs a copy of the given list|

| ~DoublyLinkedList() – destroys this list | | DoublyLinkedList& operator=(const DoublyLinkedList&) – assigns a copy | | the given list | +——————————————————————–+ size_t size() const – returns the number of elements in the list

Object& operator[](size_t) – returns a reference to the element at the specified index or throws std::out_of_range if the index is out of bounds.

void insert(size_t, const Object&) – insert the given object at the specified index or throws std::out_of_range if the index is out of bounds

void remove(size_t) – remove the object at the specified index or throws std::out_of_range if the index is out of bounds

Optional

DoublyLinkedList(DoublyLinkedList&&) – move-constructs a “copy” of the given (rvalue) list

DoublyLinkedList& operator=(DoublyLinkedList&&) – move-assigns a “copy” of the given (rvalue) list

void insert(size_t, Object&&) – insert the given (rvalue) object at the specified index or throws std::out_of_range if the index is out of bounds

const Object& operator[](size_t) const – returns a constant reference to the element at the specified index or throws std::out_of_range if the index is out of bounds.

iterator begin() returns an iterator that points to the beginning of the list

const_iterator begin() const returns an iterator that points to the beginning of the list

iterator end() returns an iterator that points to the end of the list

const_iterator end() const returns an iterator that points to the end of the list

Example

  • make an empty list DoublyLinkedList<int> list;

  • insert 3 values at the end of the list list.insert(0, 1);

list.insert(1, 2); list.insert(2, 3);

  • get the size

size_t size = list.size();

  • remove the middle element list.remove(1);

  • access the element at index 1 int value = list[1];

Task 3: Stack

Implement a stack using a list. You should use your ArrayList or DoublyLinkedList.

Requirements

Files

stack.h – contains the template definitions

stack_tests.cpp – contains the test cases and test driver (main)

Class

template <typename Object>

class Stack;

Functions (public)

Stack() – makes an empty stack

+–Rule of Three——————————————–+

| Stack(const Stack&) – constructs a copy of the given stack |

| ~Stack() – destroys this stack |

| Stack& operator=(const Stack&) – assigns a copy of the given stack |

+———————————————————–+

void push(const Object&) – add the given object to the top of the stack

void pop() – remove the top element from the stack, or throw std::out_of_range is the stack is empty.

Object& top() – return a reference to the element on top of the stack or throw std::out_of_range if the stack is empty.

Optional

Stack(Stack&&) – move-constructs a “copy” of the given (rvalue) stack

Stack& operator=(Stack&&) – move-assigns a “copy” of the given (rvalue) stack void push(Object&&) – add the given (rvalue) object to the top of the stack

const Object& top() const – returns a constant reference to the element on top of the stack or throws std::out_of_range if the stack is empty.

size_t size() const – returns the number of elements in the stack

Example

  • make an empty stack Stack<int> stack;

  • push 3 values onto the stack stack.push(1); stack.push(2); stack.push(3);

  • remove the top element stack.pop();

  • access the top element

int value = stack.top();

Task 4: Queue

Implement a queue using a list. You should use your ArrayList or DoublyLinkedList.

Requirements

Files

queue.h – contains the template definitions

queue_tests.cpp – contains the test cases and test driver (main)

Class

template <typename Object>

class Queue;

Functions (public)

Queue() – makes an empty stack

+–Rule of Three——————————————–+

| Queue(const Queue&) – constructs a copy of the given queue |

| ~Queue() – destroys this queue |

| Queue& operator=(const Queue&) – assigns a copy of the given stack |

+———————————————————–+

void enqueue(const Object&) – add the given object to the back of the queue Object dequeue() – remove and return the front element from the queue, or throw std::out_of_range if the queue is empty.

Object& front() – return a reference to the element at the front of the queue or throw std::out_of_range if the queue is empty.

Optional

Queue(Queue&&) – move-constructs a “copy” of the given (rvalue) queue

Queue& operator=(Queue&&) – move-assigns a “copy” of the given (rvalue) queue void enqueue(Object&&) – add the given (rvalue) object to the queue

const Object& front() const – returns a constant reference to the element at the front of the queue or throws std::out_of_range if the queue is empty. size_t size() const – returns the number of elements in the queue

Example

  • make an empty queue Queue<int> queue;

  • enqueue 3 values into the queue queue.enqueue(1); queue.enqueue(2); queue.enqueue(3);

  • remove the front element queue.dequeue();

  • access the front element

int value = queue.front();

How To Measure Coverage with Gcov

Compile with coverage

g++ -std=c++17 -g –coverage <source files>

Run

./a.out

Generate coverage report

gcov -mr <source file>

View coverage report

cat <source file>.gcov

-’ means the line is not executable (does not count for coverage) ‘#####’ means the line is executable but was executed 0 times ‘126’ means the line was executed 126 times

Identify lines which are not covered

grep “#####” <source file>.gcov

Clean up before next measurement

rm -f *.gcov *.gcno *.gcda

Programming Assignment 2 Lists, Stack, and Queue
$24.99 $18.99