Question: Can someone help fix this program to work in visual studios in c++? Thank you so much //node2.h #ifndef MAIN_SAVITCH_NODE2_H #define MAIN_SAVITCH_NODE2_H #include // Provides

Can someone help fix this program to work in visual studios in c++? Thank you so much

//node2.h

#ifndef MAIN_SAVITCH_NODE2_H #define MAIN_SAVITCH_NODE2_H #include // Provides NULL and size_t #include // Provides iterator and forward_iterator_tag

namespace main_savitch_6B { template class node { public: typedef Item value_type; node(const Item& init_data = Item(), node* init_link = NULL) { data_field = init_data; link_field = init_link; } Item& data() { return data_field; } node* link() { return link_field; } void set_data(const Item& new_data) { data_field = new_data; } void set_link(node* new_link) { link_field = new_link; } const Item& data() const { return data_field; } const node* link() const { return link_field; } private: Item data_field; node *link_field; };

template void list_clear(node*& head_ptr);

template void list_copy (const node* source_ptr, node*& head_ptr, node*& tail_ptr);

template void list_head_insert(node*& head_ptr, const Item& entry);

template void list_head_remove(node*& head_ptr);

template void list_insert(node* previous_ptr, const Item& entry);

template std::size_t list_length(const node* head_ptr);

template NodePtr list_locate(NodePtr head_ptr, SizeType position);

template void list_remove(node* previous_ptr);

template NodePtr list_search(NodePtr head_ptr, const Item& target);

template class node_iterator : public std::iterator { public: node_iterator(node* initial = NULL) { current = initial; } Item& operator *() const { return current->data(); } node_iterator& operator ++() // Prefix ++ { current = current->link(); return *this; } node_iterator operator ++(int) // Postfix ++ { node_iterator original(current); current = current->link(); return original; } bool operator ==(const node_iterator other) const { return current == other.current; } bool operator !=(const node_iterator other) const { return current != other.current; } private: node* current; };

template class const_node_iterator : public std::iterator { public: const_node_iterator(const node* initial = NULL) { current = initial; } const Item& operator *() const { return current->data(); } const_node_iterator& operator ++() // Prefix ++ { current = current->link(); return *this; } const_node_iterator operator ++(int) // Postfix ++ { const_node_iterator original(current); current = current->link(); return original; } bool operator ==(const const_node_iterator other) const { return current == other.current; } bool operator !=(const const_node_iterator other) const { return current != other.current; } private: const node* current; }; }

#include "node2.template" #endif

//node2.template

#include "stdafx.h" #include // Provides assert #include // Provides NULL and size_t

namespace main_savitch_6B { template void list_clear(node*& head_ptr) // Library facilities used: cstdlib { while (head_ptr != NULL) list_head_remove(head_ptr); }

template void list_copy( const node* source_ptr, node*& head_ptr, node*& tail_ptr ) // Library facilities used: cstdlib { head_ptr = NULL; tail_ptr = NULL;

// Handle the case of the empty list if (source_ptr == NULL) return;

// Make the head node for the newly created list, and put data in it list_head_insert(head_ptr, source_ptr->data( )); tail_ptr = head_ptr; // Copy rest of the nodes one at a time, adding at the tail of new list source_ptr = source_ptr->link( ); while (source_ptr != NULL) { list_insert(tail_ptr, source_ptr->data( )); tail_ptr = tail_ptr->link( ); source_ptr = source_ptr->link( ); } } template void list_head_insert(node*& head_ptr, const Item& entry) { head_ptr = new node(entry, head_ptr); }

template void list_head_remove(node*& head_ptr) { node *remove_ptr;

remove_ptr = head_ptr; head_ptr = head_ptr->link( ); delete remove_ptr; }

template void list_insert(node* previous_ptr, const Item& entry) { node *insert_ptr; insert_ptr = new node(entry, previous_ptr->link( )); previous_ptr->set_link(insert_ptr); }

template std::size_t list_length(const node* head_ptr) // Library facilities used: cstdlib { const node *cursor; std::size_t answer; answer = 0; for (cursor = head_ptr; cursor != NULL; cursor = cursor->link( )) ++answer; return answer; }

template NodePtr list_locate(NodePtr head_ptr, SizeType position) // Library facilities used: cassert, cstdlib { NodePtr cursor; SizeType i; assert(0 < position); cursor = head_ptr; for (i = 1; (i < position) && (cursor != NULL); ++i) cursor = cursor->link( ); return cursor; }

template void list_remove(node* previous_ptr) { node *remove_ptr;

remove_ptr = previous_ptr->link( ); previous_ptr->set_link(remove_ptr->link( )); delete remove_ptr; }

template NodePtr list_search(NodePtr head_ptr, const Item& target) // Library facilities used: cstdlib { NodePtr cursor; for (cursor = head_ptr; cursor != NULL; cursor = cursor->link( )) if (target == cursor->data( )) return cursor; return NULL; } }

//table2.h

#ifndef TABLE2_H #define TABLE2_H #include #include "node2.h"

namespace main_savitch_12B { template class table { public: static const std::size_t TABLE_SIZE = 811; table(); table(const table& source); ~table(); void insert(const RecordType& entry); void remove(int key); void operator =(const table& source); void find(int key, bool& found, RecordType& result) const; bool is_present(int key) const; std::size_t size() const { return total_records; }

private: main_savitch_6B::node *data[TABLE_SIZE]; std::size_t total_records; std::size_t hash(int key) const; }; } #include "table2.template" #endif

//table2.template

using namespace main_savitch_12B; template table::table() { total_records = 0; }

template table::table(const table& source) { copy(source.data, source.data + total_records, data); total_records = source.total_records; }

template table::~table() { }

template void table::insert(const RecordType &entry) { assert(entry.key >= 0); size_t index = hash(entry.key); if (!is_present(entry.key)) { data[index].push_back(entry); ++total_records; } else { for (typename list::iterator i = data[index].begin(); i != data[index].end(); ++i) { if (i->key == entry.key) { *i = entry; break; } } } }

template void table::remove(int key) { if (is_present(key)) { int index = hash(key); for (typename list::iterator i = data[index].begin(); i != data[index].end(); ++i) { if (i->key == key) { data[index].erase(i); --total_records; return; } } } }

template void table::operator =(const table &source) { if (this != &source) { copy(source.data, source.data + total_records, data); total_records = source.total_records; } }

template void table::find(int key, bool &found, RecordType &result) const { size_t index = hash(key); for (typename list::const_iterator i = data[index].begin(); i != data[index].end() ; i++) { if (key == i->key) { found = true; result = *i; return; } } found = false; }

template bool table::is_present(int key) const { size_t index = hash(key); for (typename list::const_iterator i = data[index].begin(); i != data[index].end() ; i++) { if (key == i->key) { return true; } } return false; }

template size_t table::hash(int key) const { return (key % TABLE_SIZE); }

//testlab2.cpp

using namespace main_savitch_12B; template table::table() { total_records = 0; }

template table::table(const table& source) { copy(source.data, source.data + total_records, data); total_records = source.total_records; }

template table::~table() { }

template void table::insert(const RecordType &entry) { assert(entry.key >= 0); size_t index = hash(entry.key); if (!is_present(entry.key)) { data[index].push_back(entry); ++total_records; } else { for (typename list::iterator i = data[index].begin(); i != data[index].end(); ++i) { if (i->key == entry.key) { *i = entry; break; } } } }

template void table::remove(int key) { if (is_present(key)) { int index = hash(key); for (typename list::iterator i = data[index].begin(); i != data[index].end(); ++i) { if (i->key == key) { data[index].erase(i); --total_records; return; } } } }

template void table::operator =(const table &source) { if (this != &source) { copy(source.data, source.data + total_records, data); total_records = source.total_records; } }

template void table::find(int key, bool &found, RecordType &result) const { size_t index = hash(key); for (typename list::const_iterator i = data[index].begin(); i != data[index].end() ; i++) { if (key == i->key) { found = true; result = *i; return; } } found = false; }

template bool table::is_present(int key) const { size_t index = hash(key); for (typename list::const_iterator i = data[index].begin(); i != data[index].end() ; i++) { if (key == i->key) { return true; } } return false; }

template size_t table::hash(int key) const { return (key % TABLE_SIZE); }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!