Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Data Structure in C++ The Problem with my code.. dlist.cc: In function 'std::ostream& operator <

Data Structure in C++

The Problem with my code..

dlist.cc: In function 'std::ostream& operator<<(std::ostream&, dlist&)': dlist.cc:66:10: error: invalid initialization of reference of type 'std::ostream& {aka std::basic_ostream&}' from expression of type 'dlist::node*' dlist.cc: In function 'dlist operator+(dlist&, dlist&)': dlist.cc:93:8: error: invalid operands of types 'dlist::node*' and 'dlist::node*' to binary 'operator+' dlist.cc:97:8: error: could not convert 'result' from 'int' to 'dlist'

and also my professor pointed out...

1. In your insert you are not updating previous->next->prev to point to the new node.

2. Similarly for del. Check your list-modifying methods to make sure they are correctly updating *both* the next and prev pointers.

3. operator+ returns a dlist, not an int.

How can I fix these problems??

My code:

#include "dlist.h"

dlist::node*dlist::at(int n){

node*current = head();

while(n != 0){

current= current->next;

n--;

}

return current;

}

void dlist::insert(node *previous, int value){

node*n = new node{value, previous -> next,previous};

previous -> next = n;

}

void dlist::del(node* which){

node*c= which -> next;

which -> next = which-> next-> next;

delete c;

}

void dlist::push_back(int value){

node*c = tail();

insert(c,value);

}

void dlist::push_front(int value){

insert(head(), value);

}

void dlist::pop_front(){

node*n = head();

n = head() -> next;

delete n;

}

void dlist::pop_back(){

node*n = tail();

n = tail() -> prev;

delete n;

}

int dlist::size(){

node*c = head();

int s = 0;

while(c){

c = c -> next;

s++;

}

return s;

}

bool dlist::empty(){

if(size() == 0)

return true;

else

return false;

}

std::ostream& operator<< (std::ostream& out, dlist& l){

dlist::node*c = l.head();

while(true){

out << c;

c = c-> next;

return c;

}

}

bool operator== (dlist& a, dlist& b){

dlist::node* ca = a.head();

dlist::node* cb = b.head();

while(ca&&cb){

if(ca-> next != cb->next)

return false;

else{

ca = ca->next;

cb = cb->next;

}

}

if(ca== nullptr && cb == nullptr)

return true;

else

return false;

}

dlist operator+ (dlist& a, dlist& b){

dlist::node* ca = a.head();

dlist::node* cb = b.head();

int result;

while(ca&&cb){

ca + cb = result;

ca = ca -> next;

cb = cb -> next;

}

return result;

}

dlist reverse(dlist& l){

dlist l2;

dlist::node* c = l.head();

while(c->next!=l.tail()){

l2.push_front(c->next->value);

c = c-> next;

}

return l2;

}

"dlist.h"

#pragma once

/*

dlist.h

Doubly-linked lists of ints

*/

#include

class dlist {

public:

dlist() { }

// Implement the destructor, to delete all the nodes

~dlist();

struct node {

int value;

node* next;

node* prev;

};

node* head() const { return _head; }

node* tail() const { return _tail; }

// **** Implement ALL the following methods ****

// Returns the node at a particular index (0 is the head).

node* at(int);

// Insert a new value, after an existing one

void insert(node *previous, int value);

// Delete the given node

void del(node* which);

// Add a new element to the *end* of the list

void push_back(int value);

// Add a new element to the *beginning* of the list

void push_front(int value);

// Remove the first element

void pop_front();

// Remove the last element

void pop_back();

// Get the size of the list

int size();

// Returns true if the list is empty (size == 0)

bool empty();

private:

node* _head = nullptr;

node* _tail = nullptr;

};

// **** Implement ALL the following functions ****

/* out << l

Prints a list to the ostream out. This is mostly for your convenience in

testing your code; it's much easier to figure out what's going on if you

can easily print out lists!

*/

std::ostream& operator<< (std::ostream& out, dlist& l);

/* a == b

Compares two lists for equality, returning true if they have the same

elements in the same positions. (Hint: it is *not* enough to just compare

pointers! You have to compare the values stored in the nodes.)

*/

bool operator== (dlist& a, dlist& b);

/* a + b

Returns a new list consisting of all the elements of a, followed by all the

elements of b (i.e., the list concatenation).

*/

dlist operator+ (dlist& a, dlist& b);

/* reverse(l)

Returns a new list that is the *reversal* of l; that is, a new list

containing the same elements as l but in the reverse order.

*/

dlist reverse(dlist& l);

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_step_2

Step: 3

blur-text-image_step3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

More Books

Students also viewed these Databases questions

Question

2. Identify and choose outcomes to evaluate a training program.

Answered: 1 week ago

Question

6. Conduct a cost-benefit analysis for a training program.

Answered: 1 week ago