This means that the originally even-valued nodes should be retained as part of the resulting list. Destroy ONLY nodes that are originally odd-valued. Create new nodes and copy data between nodes ONLY when duplicating originally even-valued nodes. Only ONE new node should be created for each originally even-valued node. Creating pointer-to-node's (to provide temporary storage for node addresses) does not constitute creating new nodes or copying of items. NOT make any temporary copies of any of the data items (using any kind of data structures including but not limited to arrays, linked lists and trees). This means that the algorithm should largely involve the manipulation of pointers. Function must be iterative (NOT recursive) - use only looping construct(s), without the function calling itself (directly or indirectly). Function should not call any other functions to help in performing the task.

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
icon
Concept explainers
Question

//Algorithm should: 
/*NOT destroy any of the originally even-valued node. 
    This means that the originally even-valued nodes should be retained as part of the resulting list.
    Destroy ONLY nodes that are originally odd-valued.
    Create new nodes and copy data between nodes ONLY when duplicating originally even-valued nodes.
    Only ONE new node should be created for each originally even-valued node.
    Creating pointer-to-node's (to provide temporary storage for node addresses) does not constitute creating new nodes or copying of items.
    NOT make any temporary copies of any of the data items (using any kind of data structures including but not limited to arrays, linked lists and trees).
    This means that the algorithm should largely involve the manipulation of pointers.
    Function must be iterative (NOT recursive) - use only looping construct(s), without the function calling itself (directly or indirectly).
    Function should not call any other functions to help in performing the task.

bool DelOddCopEven(Node* headPtr)
{
    
    }

int FindListLength(Node* headPtr)
{
   int length = 0;

   while (headPtr != 0)
   {
      ++length;
      headPtr = headPtr->link;
   }

   return length;
}

bool IsSortedUp(Node* headPtr)
{
   if (headPtr == 0 || headPtr->link == 0) // empty or 1-node
      return true;
   while (headPtr->link != 0) // not at last node
   {
      if (headPtr->link->data < headPtr->data)
         return false;
      headPtr = headPtr->link;
   }
   return true;
}

void InsertAsHead(Node*& headPtr, int value)
{
   Node *newNodePtr = new Node;
   newNodePtr->data = value;
   newNodePtr->link = headPtr;
   headPtr = newNodePtr;
}

void InsertAsTail(Node*& headPtr, int value)
{
   Node *newNodePtr = new Node;
   newNodePtr->data = value;
   newNodePtr->link = 0;
   if (headPtr == 0) 
      headPtr = newNodePtr;
   else
   {
      Node *cursor = headPtr;

      while (cursor->link != 0) // not at last node
         cursor = cursor->link;
      cursor->link = newNodePtr;
   }
}

void InsertSortedUp(Node*& headPtr, int value)
{
   Node *precursor = 0,
        *cursor = headPtr;

   while (cursor != 0 && cursor->data < value)
   {
      precursor = cursor;
      cursor = cursor->link;
   }

   Node *newNodePtr = new Node;
   newNodePtr->data = value;
   newNodePtr->link = cursor;
   if (cursor == headPtr)
      headPtr = newNodePtr;
   else
      precursor->link = newNodePtr;

   ///////////////////////////////////////////////////////////
   /* using-only-cursor (no precursor) version
   Node *newNodePtr = new Node;
   newNodePtr->data = value;
   //newNodePtr->link = 0;
   //if (headPtr == 0)
   //   headPtr = newNodePtr;
   //else if (headPtr->data >= value)
   //{
   //   newNodePtr->link = headPtr;
   //   headPtr = newNodePtr;
   //}
   if (headPtr == 0 || headPtr->data >= value)
   {
      newNodePtr->link = headPtr;
      headPtr = newNodePtr;
   }
   //else if (headPtr->link == 0)
   //   head->link = newNodePtr;
   else
   {
      Node *cursor = headPtr;
      while (cursor->link != 0 && cursor->link->data < value)
         cursor = cursor->link;
      //if (cursor->link != 0)
      //   newNodePtr->link = cursor->link;
      newNodePtr->link = cursor->link;
      cursor->link = newNodePtr;
   }

   ////////////////// commented lines removed //////////////////

   Node *newNodePtr = new Node;
   newNodePtr->data = value;
   if (headPtr == 0 || headPtr->data >= value)
   {
      newNodePtr->link = headPtr;
      headPtr = newNodePtr;
   }
   else
   {
      Node *cursor = headPtr;
      while (cursor->link != 0 && cursor->link->data < value)
         cursor = cursor->link;
      newNodePtr->link = cursor->link;
      cursor->link = newNodePtr;
   }
   */
   ///////////////////////////////////////////////////////////
}

bool DelFirstTargetNode(Node*& headPtr, int target)
{
   Node *precursor = 0,
        *cursor = headPtr;

   while (cursor != 0 && cursor->data != target)
   {
      precursor = cursor;
      cursor = cursor->link;
   }
   if (cursor == 0)
   {
      cout << target << " not found." << endl;
      return false;
   }
   if (cursor == headPtr) //OR precursor == 0
      headPtr = headPtr->link;
   else
      precursor->link = cursor->link;
   delete cursor;
   return true;
}

bool DelNodeBefore1stMatch(Node*& headPtr, int target)
{
   if (headPtr == 0 || headPtr->link == 0 || headPtr->data == target) return false;
   Node *cur = headPtr->link, *pre = headPtr, *prepre = 0;
   while (cur != 0 && cur->data != target)
   {
      prepre = pre;
      pre = cur;
      cur = cur->link;
   }
   if (cur == 0) return false;
   if (cur == headPtr->link)
   {
      headPtr = cur;
      delete pre;
   }
   else
   {
      prepre->link = cur;
      delete pre;
   }
   return true;
}

void ShowAll(ostream& outs, Node* headPtr)
{
   while (headPtr != 0)
   {
      outs << headPtr->data << "  ";
      headPtr = headPtr->link;
   }
   outs << endl;
}

 

 

1
#ifndef LLCP_INT_H
2 #define LLCP_INT_H
3
4 #include <iostream>
5
6 struct Node
7
{
8
int data;
Node *link;
9
10
11
12
13 int
14 bool
15 void
16 void
17 void
18 bool
19 bool
20 void
21 void
};
bool DelOddCopEven (Node* headptr);
FindList Length (Node* headptr);
IsSortedUp (Node* headptr);
InsertAsHead (Node*& headPtr, int value);
InsertAs Tail(Node*& headPtr, int value);
InsertSortedUp (Node*& headPtr, int value);
DelFirstTargetNode (Node*& headPtr, int target);
DelNodeBefore1stMatch (Node* & headPtr, int target);
ShowAll(std::ostream& outs, Node* headptr);
FindMinMax (Node* headPtr, int& minValue, int& maxValue);
22 double FindAverage (Node* headptr);
23 void ListClear (Node* & headPtr, int noMsg = 0);
24
25
// prototype of DeloddCopEven of Assignment 5 Part 1
26
27
28 #endif
29
Transcribed Image Text:1 #ifndef LLCP_INT_H 2 #define LLCP_INT_H 3 4 #include <iostream> 5 6 struct Node 7 { 8 int data; Node *link; 9 10 11 12 13 int 14 bool 15 void 16 void 17 void 18 bool 19 bool 20 void 21 void }; bool DelOddCopEven (Node* headptr); FindList Length (Node* headptr); IsSortedUp (Node* headptr); InsertAsHead (Node*& headPtr, int value); InsertAs Tail(Node*& headPtr, int value); InsertSortedUp (Node*& headPtr, int value); DelFirstTargetNode (Node*& headPtr, int target); DelNodeBefore1stMatch (Node* & headPtr, int target); ShowAll(std::ostream& outs, Node* headptr); FindMinMax (Node* headPtr, int& minValue, int& maxValue); 22 double FindAverage (Node* headptr); 23 void ListClear (Node* & headPtr, int noMsg = 0); 24 25 // prototype of DeloddCopEven of Assignment 5 Part 1 26 27 28 #endif 29
passed test on empty list
==============
test case 1 of 1000000
initial: 6 7 5 3
ought2b: 6 6
outcome: 6 6
test case 2 of 1000000
initial: 6 2 9 1 2 7
ought2b: 6 6
2 2 2 2
outcome: 6 6
2 2 2 2
==
test case 3 of 1000000
initial: 9
ought2b:
outcome:
===
test case 4 of 1000000
initial: 60 6 2
ought2b: 6 6 0
0
outcome: 6 6
=========
test case 5 of 1000000
initial: 1 8 7 9 2 0
ought2b: 8 8 2 2 0
0
outcome: 8 8 2 2
0
===
6
0 0 6
00 00 00
test case 40000 of 1000000
initial: 5 5 1
ought2b:
outcome:
==========
0
test case 80000 of 1000000
initial: 2
ought2b: 2 2
outcome: 2 2
=====
6 2 2
6
2
2
======
======
222
==
test case 120000 of 1000000
initial: 4 4 1 8
ought2b: 4 4 4
4 8 8
outcome: 4 4 4 4 8 8
test case 160000 of 1000000
initial: 0 4 6
ought2b: 00 4 4 6 6
outcome: 0 0 4 4 6 6
====
2 2
test case 200000 of 1000000
initial: 1 7 0 3 7 7 3
ought2b: 0 0
outcome: 0 0
2
===
======
Transcribed Image Text:passed test on empty list ============== test case 1 of 1000000 initial: 6 7 5 3 ought2b: 6 6 outcome: 6 6 test case 2 of 1000000 initial: 6 2 9 1 2 7 ought2b: 6 6 2 2 2 2 outcome: 6 6 2 2 2 2 == test case 3 of 1000000 initial: 9 ought2b: outcome: === test case 4 of 1000000 initial: 60 6 2 ought2b: 6 6 0 0 outcome: 6 6 ========= test case 5 of 1000000 initial: 1 8 7 9 2 0 ought2b: 8 8 2 2 0 0 outcome: 8 8 2 2 0 === 6 0 0 6 00 00 00 test case 40000 of 1000000 initial: 5 5 1 ought2b: outcome: ========== 0 test case 80000 of 1000000 initial: 2 ought2b: 2 2 outcome: 2 2 ===== 6 2 2 6 2 2 ====== ====== 222 == test case 120000 of 1000000 initial: 4 4 1 8 ought2b: 4 4 4 4 8 8 outcome: 4 4 4 4 8 8 test case 160000 of 1000000 initial: 0 4 6 ought2b: 00 4 4 6 6 outcome: 0 0 4 4 6 6 ==== 2 2 test case 200000 of 1000000 initial: 1 7 0 3 7 7 3 ought2b: 0 0 outcome: 0 0 2 === ======
Expert Solution
steps

Step by step

Solved in 4 steps with 2 images

Blurred answer
Knowledge Booster
Types of Linked List
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education