Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

Having trouble adding new double linked lists

$
0
0
So I have most of my code down the problem is when I try and add a new node to my list as seen in my main it doesn't seem to work. Ill add it but then when I try to print it nothing comes out. Also on a side not I need to be able to put in names and age and then search for like one or the other as shown in the question I have below. Can anyone give me an idea or hint or just flat up tell me how to go about doing it because I have no idea how to make a single string take first and last name and then have its own separate area for age. It boggles my mind. [Note: A lot of my gui code doesnt work cause i was just copying and pasting from other parts of my code].

Write an object oriented C++ program to create a doubly linked. Each node should be
able to store a person's first and last names, along with their respective age. Initialize the
list with 5 nodes. The program should include a member function that allows the user to
print out all the nodes whose age is less than a value input by the user (in either
direction). It should also allow the user to search for a particular person's name. It should
be able to output the lists average age. Finally it should allow for a name to be removed.
The program should allow the user to take choices from a menu.

#include <iostream>
#include <string>
using namespace std;

 typedef string Elem;				// list element type
  class DNode {					// doubly linked list node
  private:
    Elem elem;					// node element value
    DNode* prev;				// previous node in list
    DNode* next;				// next node in list
    friend class DLinkedList;			// allow DLinkedList access
  };

class DLinkedList {				// doubly linked list
  public:
    DLinkedList();				// constructor
    ~DLinkedList();				// destructor
    bool empty() const;				// is list empty?
    const Elem& front() const;			// get front element
    const Elem& back() const;			// get back element
    void addFront(const Elem& name);		// add to front of list
    void addBack(const Elem& name);		// add to back of list
    void removeFront();				// remove from front
    void removeBack();				// remove from back
	void displayViaAge();
	void displayViaName();
  private:					// local type definitions
    DNode* header;				// list sentinels
    DNode* trailer;
  protected:					// local utilities
    void add(DNode* v, const Elem& name);		// insert new node before v
    void remove(DNode* v);			// remove node v
  };

  DLinkedList::DLinkedList() {			// constructor
    header = new DNode;				// create sentinels
    trailer = new DNode;
    header->next = trailer;			// have them point to each other
    trailer->prev = header;
  }

    DLinkedList::~DLinkedList() {			// destructor
    while (!empty()) removeFront();		// remove all but sentinels
    delete header;				// remove the sentinels
    delete trailer;
  }
        						// insert new node before v
  void DLinkedList::add(DNode* v, const Elem& name) {
    DNode* u = new DNode;  u->elem = name;		// create a new node for e
    u->next = v;				// link u in between v
    u->prev = v->prev;				// ...and v->prev
    v->prev->next = v->prev = u;
  }

  void DLinkedList::addFront(const Elem& name)	// add to front of list
    { add(header->next, name); }
  
  void DLinkedList::addBack(const Elem& name)	// add to back of list
    { add(trailer, name); }

   void DLinkedList::remove(DNode* v) {		// remove node v
    DNode* u = v->prev;				// predecessor
    DNode* w = v->next;				// successor
    u->next = w;				// unlink v from list
    w->prev = u;
    delete v;
  }

  void DLinkedList::removeFront()		// remove from font
    { remove(header->next); }
  
  void DLinkedList::removeBack()		// remove from back
    { remove(trailer->prev); }

 
	 bool DLinkedList::empty() const		// is list empty?
    { return (header->next == trailer); }

  const Elem& DLinkedList::front() const	// get front element
    { return header->next->elem; }

  const Elem& DLinkedList::back() const		// get back element
    { return trailer->prev->elem; }

  void DLinkedList::displayViaAge() {                     //Displays person via age
      	  	  
	  DNode*temp = header;

       while(temp!=trailer)
       {

		   //if(howold = age)
              cout << temp->elem <<endl;
              temp = temp -> next;
       }
	   
	   cout << temp->elem<<endl;
  }

int main(){
	char input = 'z';
	string entry;
	int age;
	DLinkedList person;

	person.addFront("Takkun Bradly");
	person.addFront("Devindra Ardnived");
	person.addFront("SeboY Wang");
	person.addFront("DoubleX Slash");
	person.addFront("Uncle Jelly");
	
	cout << "What would you like to do?" << endl;
	cout << "Enter 'A' to: Add a new person" << endl;
	cout << "Enter 'B' to: Remove a person" << endl;
	cout << "Enter 'C' to: Search for people via age" << endl;
	cout << "Enter 'D' to: Search for people via name" << endl;
	cout << "Enter 'E' to: Average all the total ages" << endl;
	cout << "Enter 'F' to: Quit" << endl;

while(input != 'f') {

	cin >> input;
	cout << endl;

		while ((input != 'a')&&(input != 'b')&&(input != 'c')&&(input != 'd')&&(input != 'e')&&(input != 'f')) {
			
			cout << "Please enter a valid selection" << endl;			
			cin >> input;
		}

		if ((input == 'a')){
			cout << "Please enter their name: ";
			cin.ignore();
			getline(cin, entry);

			cout << "Please enter their age: ";
			cin >> age;
			person.addFront(entry);
			
		}

		if ((input == 'b')){
			cout << "Who would you like to remove: ";
			cin.ignore();
			getline(cin, entry);
			person.removeFront();
		}

		if ((input == 'c')){
			cout << "What is the age of the person you are looking for?: ";
			person.displayViaAge();
		}

		if ((input == 'd')){
			cout << "What is the name of the person you are looking for?: ";
			cin.ignore();
			getline(cin, entry);
			person.addFront(entry);
		}

		if ((input == 'e')){
			return 0;
		}

		cout << endl;
	}
}


Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>