Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Data Structure in C++ Doubly Linked Lists of ints http://staffwww.fullcoll.edu/a

ID: 3798499 • Letter: D

Question

Data Structure in C++

Doubly Linked Lists of ints

http://staffwww.fullcoll.edu/aclifton/courses/cs133_fa16/files/dlist.h

This is my code below: dlist.cc

-------------------------------------------------------------------------------------------------------

#include <iostream>
#include "dlist.h"

dlist::node* dlist::at(int n){
node* c = _head;
while(n > 0 && c){
c = c->next;
n--;
}
return c;
}

void dlist::insert(node* previous, int value){
node* n = new node{value, previous->next};
previous->next = n;
}//update tail

void dlist::del(node* which){
node* nn = which->next;
which->next = nn->next;
delete nn;
}

void dlist::push_back(int value){
node* n = new node{value, nullptr};
_tail->next = n;
_tail-> n;
}

void dlist::push_front(int value){
node* n = new node(value, nullptr);
_head->prev = n;
_head-> n;

}

void dlist::pop_front(){
node* n = _head;
_head = _head->next;
delete n;
}

void dlist::pop_back(){
node* n = _tail;
_tail = _tail->prev;
delete n;
}

int dlist::size() {
node* c = _head;
int s = 0;
while(c){
s++;
c = c->next;
}
return s;
}

--------------------------------------------------------------------------------

Please fix and complete my code, and I also need whole code contatining main function for testing dlist.cc

In this assignment, you will implement a doubly-linked list class. together with some list operations. To make things easier, you'll implement a list of int rather than a template class pragma once dlist. h Doubly linked lists of ints include Kostream class dlist public: d list struct node int value node next node prev; node' head() const return -head; node" tail() const t 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)

Explanation / Answer

#include<iostream>
#include<cstdio>
#include<cstdlib>
/*
* Node Declaration
*/
using namespace std;
struct node
{
int value;
string name;
struct node *next;
       struct node *prev;
       }*start;

   /*class declaration
class dlist
   {
   public:
   void create_list(int value);
   void push_front(int value);
void push_back(int value, int position);
void pop_front(int value);
void pop_back(int value);
void display_dlist();
void reverse();
dlist()
{
start = NULL;
head=NULL;
last=NULL;
}
bool empty() const { return head==NULL; }
friend ostream& operator<<(ostream& ,const dlist& );
void insert(const string& );
void remove(const string& );

private:

node* head() const { return _head; }

node* tail() const { return _tail; }

};

dlist.cc:

/* Create Double Link List*/

void dlist::create_list(int value)
{
    struct node *s, *temp;
    temp = new(struct node);
    temp->info = value;
    temp->next = NULL;
    if (start == NULL)
    {
        temp->prev = NULL;
        start = temp;
    }
    else
    {
        s = start;
        while (s->next != NULL)
            s = s->next;
        s->next = temp;
        temp->prev = s;
    }
}

/*
* Insertion at the beginning
*/
void dlist::add_begin(int value)
{
    if (start == NULL)
    {
        cout<<"First Create the list."<<endl;
        return;
    }
    struct node *temp;
    temp = new(struct node);
    temp->prev = NULL;
    temp->info = value;
    temp->next = start;
    start->prev = temp;
    start = temp;
    cout<<"Element Inserted"<<endl;
}

/*
* Insertion of element at a particular position
*/
void dlist::add_after(int value, int pos)
{
    if (start == NULL)
    {
        cout<<"First Create the list."<<endl;
       return;
    }
    struct node *tmp, *q;
    int i;
    q = start;
    for (i = 0;i < pos - 1;i++)
    {
        q = q->next;
        if (q == NULL)
        {
            cout<<"There are less than ";
            cout<<pos<<" elements."<<endl;
            return;
        }
    }
    tmp = new(struct node);
    tmp->info = value;
    if (q->next == NULL)
    {
        q->next = tmp;
        tmp->next = NULL;
        tmp->prev = q;     
    }
    else
    {
        tmp->next = q->next;
        tmp->next->prev = tmp;
        q->next = tmp;
        tmp->prev = q;
    }
    cout<<"Element Inserted"<<endl;
}

/*
* Deletion of element from the list
*/
void dlist::delete_element(int value)
{
    struct node *tmp, *q;
     /*first element deletion*/
    if (start->info == value)
    {
        tmp = start;
        start = start->next;
        start->prev = NULL;
        cout<<"Element Deleted"<<endl;
        free(tmp);
        return;
    }
    q = start;
    while (q->next->next != NULL)
    {  
        /*Element deleted in between*/
        if (q->next->info == value)
        {
            tmp = q->next;
            q->next = tmp->next;
            tmp->next->prev = q;
            cout<<"Element Deleted"<<endl;
            free(tmp);
            return;
        }
        q = q->next;
    }
     /*last element deleted*/
    if (q->next->info == value)   
    {          
        tmp = q->next;
        free(tmp);
        q->next = NULL;
        cout<<"Element Deleted"<<endl;
        return;
    }
    cout<<"Element "<<value<<" not found"<<endl;
}

/*insert elements

void dlist::insert(const string& s)

{

    if(empty())

    {

       Node* temp = new Node;

       head = temp;

       last = temp;

       temp->prev = NULL;

       temp->next = NULL;

       temp->name = s;

    }

    else

    {

       Node* curr;

       curr = head;

       while( s>curr->name && curr->next != last->next) curr = curr->next;

if(curr == head)

       {

         Node* temp = new Node;

         temp->name = s;

         temp->prev = curr;

         temp->next = NULL;

         head->next = temp;

         last = temp;

      // cout<<" Inserted "<<s<<" After "<<curr->name<<endl;

       }

       else

       {

       if(curr == last && s>last->name)

       {

         last->next = new Node;

         (last->next)->prev = last;

         last = last->next;

         last->next = NULL;

         last->name = s;

      // cout<<" Added "<<s<<" at the end "<<endl;

       }

       else

       {

         Node* temp = new Node;

         temp->name = s;

         temp->next = curr;

         (curr->prev)->next = temp;

         temp->prev = curr->prev;

         curr->prev = temp;

      // cout<<" Inserted "<<s<<" Before "<<curr->name<<endl;

       }}

     }}

ostream& operator<<(ostream& ostr, const dlist& dl )

{

    if(dl.empty()) ostr<<" The list is empty. "<<endl;

    else

    {

dlist::Node* curr;

        for(curr = dl.head; curr != dl.last->next; curr=curr->next)

          ostr<<curr->name<<" ";

        ostr<<endl;

        ostr<<endl;

        return ostr;

    }

}

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

{

if(dl.empty()) bool<<" The list is empty. "<<endl;

    else

    {

        dlist::Node* curr; {

while (temp -> next) {
        head = head -> next;
        delete temp;
        temp = head;
    }
temp = curr -> head;

    while (temp) {
        append(temp);
        temp = temp -> next;
    }
bool<<endl;

return bool; }

void dlist::reverse()

{

struct node *p1, *p2;

p1 = start;

p2 = p1->next;

p1->next = NULL;

p1->prev = p2;

while (p2 != NULL)

{

p2->prev = p2->next;

p2->next = p1;

p1 = p2;

p2 = p2->prev;

}

start = p1;

cout<<"List Reversed"<<endl;

}

lists_tets.cc

int main()
{
int choice, element, position;
dlist dl;
while (1)
{
cout<<endl<<"----------------------------"<<endl;
cout<<endl<<"Operations on Doubly linked list"<<endl;
cout<<endl<<"----------------------------"<<endl;   
cout<<"1.Create Node"<<endl;
cout<<"2.Add at begining"<<endl;
cout<<"3.Add after position"<<endl;
cout<<"4.Delete"<<endl;
cout<<"5.size"<<endl;

cout<<"6.Reverse"<<endl;
cout<<"7.Quit"<<endl;
cout<<"Enter your choice : ";
cin>>choice;
switch ( choice )
{
case 1:
cout<<"Enter the element: ";
cin>>element;
dl.create_list(element);
cout<<endl;
break;
case 2:
cout<<"Enter the element: ";
cin>>element;
dl.push_front(element);
cout<<endl;
break;
case 3:
cout<<"Enter the element: ";
cin>>element;
cout<<"Insert Element after postion: ";
cin>>position;
dl.push_back(element, position);
cout<<endl;
break;
case 4:
if (start == NULL)
{
cout<<"List empty,nothing to delete"<<endl;   
break;
}
cout<<"Enter the element for deletion: ";
cin>>element;
dl.pop_front(element);
cout<<endl;
break;
case 5:
dl.size();
cout<<endl;
break;
case 6:   
   cout<<"Enter the element: ";
cin>>element;
cout<<"Delete Element after postion: ";
cin>>position;
dl.pop_back(element, position);
cout<<endl;
break;

case 7:
if (start == NULL)
{
cout<<"List empty,nothing to reverse"<<endl;
break;
}
dl.reverse();
cout<<endl;
break;
case 8:
exit(1);
default:
cout<<"Wrong choice"<<endl;
}
}
return 0;
}