1. Welcome to Tacoma World!

    You are currently viewing as a guest! To get full-access, you need to register for a FREE account.

    As a registered member, you’ll be able to:
    • Participate in all Tacoma discussion topics
    • Communicate privately with other Tacoma owners from around the world
    • Post your own photos in our Members Gallery
    • Access all special features of the site

C++ Stack

Discussion in 'Technology' started by tarheelfan_08, Apr 20, 2010.

  1. Apr 20, 2010 at 6:50 PM
    #1
    tarheelfan_08

    tarheelfan_08 [OP] Carolina Alliance

    Joined:
    Jan 4, 2008
    Member:
    #4098
    Messages:
    2,944
    Gender:
    Male
    First Name:
    Justin
    North Carolina
    Vehicle:
    2010 White 4x4 Double Cab Tacoma Short Bed
    Chrome Grill, Chrome accessories(door handles and mirror covers), LEER Super White Cover, Mirrors with Turn Signals, Window Vent Visors, Step Rails, WeatherTech Digital Floor Mats, Mini Maglight Holder, Chrome Bull Bar
    Hey guys, I have been looking into queue's and stacks this week guys and I decided that I would like to convert my current array into a stack. Does anyone know how to or can give me some assistance with the current code I have?? I really do not even know how to start, and when I do it I want to keep the cars being entered automatically and not have the user input them. And I am not asking anyone to do it for me...just give me some assistance like maybe add one or 2 parts then tell me what I need to do! Or something like that, I will continue to post my code here for everyone to see my progress.

    Header
    Code:
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <functional>
    #include <algorithm>
    #include <string>
    #include <cstdlib>
    #include <sstream>
    using namespace std;
    
    //Car Class
    class Car
    {
    protected:
        string make;  //make
        string model; // model
        string color;  // color
        int year;  // year
        int mileage;  // miles on car
    
    public:
                    //Constructor that will set information for a new car
            void New_vehicle (string a, string b, string c, int d, int e) 
            {make = a; model = b; color = c; year = d; mileage = e;}
            
            Car(); //Default constructor
            Car(string, string, string, int, int);
            //mutator and accessor functions
            void setMake(string);
        void setModel(string);
        void setColor(string);
        void setYear(int);
        void setMileage(int);
    
        string getMake();
        string getModel();
        string getColor();
        int getYear();
        int getMileage();
    
            //Check mileage to see if valid
        void valid_mileage(int);
        void car_details();
        string string_car_details();
    };
    
    //Sets to default values
    Car::Car() {
            make = " ";
        model = " ";
        color = " ";
        year = 0;
        mileage = 0;
    }
            // My Vehicle set up(Make, model, color, year, mileage)
    Car::Car(string make, string model, string color, int year, int mileage) {
        this->make =  make;
        this->model = model;
        this->color = color;
        this->year = year;
        valid_mileage(mileage);
    }
    
    
    void Car::setMake(string make) {
        Car::make = make;
    }
    
    void Car::setModel(string model) {
        Car::model = model;
    }
    
    void Car::setColor(string color) {
        Car::color = color;
    }
    
    void Car::setYear(int year) {
        Car::year = year;
    }
    
    void Car::setMileage(int mileage) {
        valid_mileage(mileage);
    }
    
    
    string Car::getMake() {
        return make;
    }
    string Car::getModel() {
        return model;
    }
    string Car::getColor() {
        return color;
    }
    int Car::getYear() {
        return year;
    }
    int Car::getMileage() {
        return mileage;
    }
    
    
    void Car::valid_mileage(int mileage) {
        if (mileage>=0)
            Car::mileage=mileage;
        else {
            Car::mileage=0;
            cout << "WARNING! You have entered invalid mileage!\n";
            }
        }
    
            void Car::car_details() {
                cout << "The current car is a " << year << ' ' << color << ' '
                            << make << ' ' << model << " with " << mileage << " miles.\n\n";
            }
    
    
    
            string Car::string_car_details() {
                stringstream buf;
                buf << "The current car is a " << year << ' ' << color << ' '
                << make << ' ' << model << " with " << mileage << " miles.\n\n";
                return buf.str();
            }
    
    CPP
    Code:
    #include "CarClass.h"
    using namespace std;
    
    int main() {
        const int SIZE = 6;
            Car Car_array[SIZE] = { Car("Porsche", "911", "Silver", 2005, 45000), 
                                    Car("Ford", "Mustang", "Red", 2007, 12600),
                                    Car("Voltzwagon", "Jetta", "Black", 2006, 20218),
                                    Car("Jeep", "Cherokee", "White", 2000, 98322),
                                    Car("Nissan", "Sentra", "Red", 2002, 76046),
                                    Car("Voltzwagon", "Beetle", "Black", 2005, 28031)};
    
    Oh and I somehow want to create car class as a list node to hold the information
     
  2. Apr 20, 2010 at 7:24 PM
    #2
    tarheelfan_08

    tarheelfan_08 [OP] Carolina Alliance

    Joined:
    Jan 4, 2008
    Member:
    #4098
    Messages:
    2,944
    Gender:
    Male
    First Name:
    Justin
    North Carolina
    Vehicle:
    2010 White 4x4 Double Cab Tacoma Short Bed
    Chrome Grill, Chrome accessories(door handles and mirror covers), LEER Super White Cover, Mirrors with Turn Signals, Window Vent Visors, Step Rails, WeatherTech Digital Floor Mats, Mini Maglight Holder, Chrome Bull Bar
    This is what I got so far!

    Code:
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <functional>
    #include <algorithm>
    #include <string>
    #include <cstdlib>
    #include <sstream>
    using namespace std;
    
    //Car Class
    class Car
    {
    protected:
        string make;  //make
        string model; // model
        string color;  // color
        int year;  // year
        int mileage;  // miles on car
        int IntStackSize;
        int top;    //top of stack
    
    public:
            //Constructor that will set information for a new car
            void New_vehicle (string a, string b, string c, int d, int e) 
            {make = a; model = b; color = c; year = d; mileage = e;}
            
            Car(); //Default constructor
            Car(string, string, string, int, int);
            //Stack Information
        
            void push(int);
            void pop(int &);
            bool isFull();
            bool isEmpty();
    
            //mutator and accessor functions
            void setMake(string);
            void setModel(string);
            void setColor(string);
            void setYear(int);
            void setMileage(int);
    
            string getMake();
            string getModel();
            string getColor();
            int getYear();
            int getMileage();
    
                //Check mileage to see if valid
            void valid_mileage(int);
            void car_details();
            string string_car_details();
        
    
    
    };
    
    //Sets to default values
    Car::Car() {
            make = " ";
        model = " ";
        color = " ";
        year = 0;
        mileage = 0;
    }
            // My Vehicle set up(Make, model, color, year, mileage)
    Car::Car(string make, string model, string color, int year, int mileage) {
        this->make =  make;
        this->model = model;
        this->color = color;
        this->year = year;
        valid_mileage(mileage);
    }
    
    
    void Car::setMake(string make) {
        Car::make = make;
    }
    
    void Car::setModel(string model) {
        Car::model = model;
    }
    
    void Car::setColor(string color) {
        Car::color = color;
    }
    
    void Car::setYear(int year) {
        Car::year = year;
    }
    
    void Car::setMileage(int mileage) {
        valid_mileage(mileage);
    }
    
    
    string Car::getMake() {
        return make;
    }
    string Car::getModel() {
        return model;
    }
    string Car::getColor() {
        return color;
    }
    int Car::getYear() {
        return year;
    }
    int Car::getMileage() {
        return mileage;
    }
    
    
    void Car::valid_mileage(int mileage) {
        if (mileage>=0)
            Car::mileage=mileage;
        else {
            Car::mileage=0;
            cout << "WARNING! You have entered invalid mileage!\n";
            }
        }
    
            void Car::car_details() {
                cout << "The current car is a " << year << ' ' << color << ' '
                            << make << ' ' << model << " with " << mileage << " miles.\n\n";
            }
    
    
    
            string Car::string_car_details() {
                stringstream buf;
                buf << "The current car is a " << year << ' ' << color << ' '
                << make << ' ' << model << " with " << mileage << " miles.\n\n";
                return buf.str();
            }
    
    Code:
    #include "CarClass.h"
    using namespace std;
    
    Car::Car(string make, string model, string color, int year, int mileage)
    {
        const int SIZE = 6;
        Car Car_array[SIZE] = { Car("Porsche", "911", "Silver", 2005, 45000), 
                                    Car("Ford", "Mustang", "Red", 2007, 12600),
                                    Car("Voltzwagon", "Jetta", "Black", 2006, 20218),
                                    Car("Jeep", "Cherokee", "White", 2000, 98322),
                                    Car("Nissan", "Sentra", "Red", 2002, 76046),
                                    Car("Voltzwagon", "Beetle", "Black", 2005, 28031)};
        top =-1;
    
    }
    
    //Set up Stack Push
    void Car::push(int num)
    {
        if (isFull())
        {
            cout << "The Stack is Full!\n";
            exit(1);
        }
        else
        {
            top++;
            Car_array[top] = num;
        }
    }
    
    //Set up Stack Pop
    void Car::pop(int &num)
    {
        if (isEmpty())
        {
            cout << "The Stack is Empty!\n";
            exit(1);
        }
        else
        {
            num = Car_array[top];
            top--;
        }
    }
    
    bool Car::isFull()
    {
        if (top == IntStackSize -1)
            return true;
        else
            return false;
    }
    bool Car::isEmpty()
    {
        if (top == -1)
            return true;
        else
            return false;
    }
    
    int main() {
        
    
     
  3. Apr 21, 2010 at 1:43 PM
    #3
    ocabj

    ocabj Well-Known Member

    Joined:
    Aug 24, 2009
    Member:
    #21681
    Messages:
    127
    Gender:
    Male
    Riverside, CA
    Vehicle:
    2010 Pyrite Mica Tacoma Standard Cab
    A stack is very easy to implement since it'll work like a linked list, except your adds/deletes (or in this case, push and pops) all happen on the the top of the stack, or in terms of a linked list, the head node.

    If you want to push on to the stack, just create a new node, and set the next pointer of that node to the memory address of the existing head. If you want to pop the stack, just set the head pointer to the memory address of the next pointer of the head node, and deallocate the head node.

    Unlike a linked list, you don't have to worry about deleting from the middle of the list (and having to reassign the prev node's next pointer to point to the next pointer of the node to delete) since all deletes will happen at the top of the stack. Adds are easy because you don't have to walk down to the end of list since you add to the beginning of the list (top of the stack).
     
  4. Apr 21, 2010 at 8:14 PM
    #4
    tarheelfan_08

    tarheelfan_08 [OP] Carolina Alliance

    Joined:
    Jan 4, 2008
    Member:
    #4098
    Messages:
    2,944
    Gender:
    Male
    First Name:
    Justin
    North Carolina
    Vehicle:
    2010 White 4x4 Double Cab Tacoma Short Bed
    Chrome Grill, Chrome accessories(door handles and mirror covers), LEER Super White Cover, Mirrors with Turn Signals, Window Vent Visors, Step Rails, WeatherTech Digital Floor Mats, Mini Maglight Holder, Chrome Bull Bar
    Ok guys I got my code done using a dynamic stack..all thats left is to fix my errors! Can someone please assist me??

    Header File
    Code:
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <functional>
    #include <algorithm>
    #include <string>
    #include <cstdlib>
    #include <sstream>
    using namespace std;
    
    //Car Class
    class Car
    {
    private:
        class StackNode
        {
            friend class Car;
            string word;
            string wordTwo;
            string wordThree;
            int value;
            int valueTwo;
            StackNode *next;
    
            //Constructor
            StackNode(string word1, string word2, string word3, int value1, int value2, StackNode *next1 = NULL)
            {
                word = word1;
                wordTwo = word2;
                wordThree = word3;
                value = value1;
                value = value2;
                next = next1;
            }
        };
        StackNode *top;
    
        //Car Class information
        string make;  //make
        string model; // model
        string color;  // color
        int year;  // year
        int mileage;  // miles on car
    
    public:
        Car() { top = NULL; }
            void push(string, string, string, int, int);
            void pop(string &, string &, string &, int &, int &);
            bool isEmpty();
    
            //Constructor that will set information for a new car
            void New_vehicle (string a, string b, string c, int d, int e) 
            {make = a; model = b; color = c; year = d; mileage = e;}
            
            Car(string, string, string, int, int);
            //Stack Information
        
            //mutator and accessor functions
            void setMake(string);
            void setModel(string);
            void setColor(string);
            void setYear(int);
            void setMileage(int);
    
            string getMake();
            string getModel();
            string getColor();
            int getYear();
            int getMileage();
    
                //Check mileage to see if valid
            void valid_mileage(int);
            void car_details();
            string string_car_details();
        
    
    
    };
    
    //Sets to default values
    Car::Car() {
        make = " ";
        model = " ";
        color = " ";
        year = 0;
        mileage = 0;
    }
            // My Vehicle set up(Make, model, color, year, mileage)
    Car::Car(string make, string model, string color, int year, int mileage) {
        this->make =  make;
        this->model = model;
        this->color = color;
        this->year = year;
        valid_mileage(mileage);
    }
    
    
    void Car::setMake(string make) {
        Car::make = make;
    }
    
    void Car::setModel(string model) {
        Car::model = model;
    }
    
    void Car::setColor(string color) {
        Car::color = color;
    }
    
    void Car::setYear(int year) {
        Car::year = year;
    }
    
    void Car::setMileage(int mileage) {
        valid_mileage(mileage);
    }
    
    
    string Car::getMake() {
        return make;
    }
    string Car::getModel() {
        return model;
    }
    string Car::getColor() {
        return color;
    }
    int Car::getYear() {
        return year;
    }
    int Car::getMileage() {
        return mileage;
    }
    
    
    void Car::valid_mileage(int mileage) {
        if (mileage>=0)
            Car::mileage=mileage;
        else {
            Car::mileage=0;
            cout << "WARNING! You have entered invalid mileage!\n";
            }
        }
    
            void Car::car_details() {
                cout << "The current car is a " << year << ' ' << color << ' '
                            << make << ' ' << model << " with " << mileage << " miles.\n\n";
            }
    
    
    
            string Car::string_car_details() {
                stringstream buf;
                buf << "The current car is a " << year << ' ' << color << ' '
                << make << ' ' << model << " with " << mileage << " miles.\n\n";
                return buf.str();
            }
    
    CPP File
    Code:
    #include "CarClass.h"
    using namespace std;
    
    //Push arguments onto stack
    void Car::push(string make, string model, string color, int year, int mileage)
    {
        top = new StackNode(make, model, color, year, mileage, top);
    }
    
    //Pop removed value at top of stack and copies it to variable
    void Car::pop(string &make, string &model, string &color, int &year, int &mileage)
    {
        StackNode *temp;
        if (isEmpty())
        {
            cout << "The stack is empty.\n";
            exit(1);
        }
        else //Pop value off top of stack
        {
            make = top->word;
            model = top->wordTwo;
            color = top->wordThree;
            year = top->value;
            mileage = top->valueTwo;
            temp = top;
            top = top->next;
            delete temp;
        }
    }
    
    //Returns true if stack is empty or false otherwise
    bool Car::isEmpty()
    {
        if(!top)
            return true;
        else
            return false;
    }
    
    
    int main() {
        
        Car stack;
        string catchWord;
        string catchWord2;
        string catchWord3;
        int catchVal;
        int catchVal2;
        //Push information
        cout << "Pushing first car \n";
        stack.push("Porsche", "911", "Silver", 2005, 45000);
        cout << "Pushing second car \n";
        stack.push("Ford", "Mustang", "Red", 2007, 12600);
        cout << "Pushing third car \n";
        stack.push("Voltzwagon", "Jetta", "Black", 2006, 20218);
        cout << "Pushing fourth car \n";
        stack.push("Jeep", "Cherokee", "White", 2000, 98322);
        cout << "Pushing fifth car \n";
        stack.push("Nissan", "Sentra", "Red", 2002, 76046);
        cout << "Pushing sixth car \n";
        stack.push("Voltzwagon", "Beetle", "Black", 2005, 28031);
    
        cout << "Popping...\n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
    
        cout << "\n Attempting to pop again... ";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
    
    
        return 0;
    }
    
    ERRORS:

    1>------ Build started: Project: Week13, Configuration: Debug Win32 ------
    1> Car.cpp
    1>\carclass.h(81): error C2084: function 'Car::Car(void)' already has a body
    1> \carclass.h(46) : see previous definition of '{ctor}'
    1>\car.cpp(44): error C2264: 'Car::Car' : error in function definition or declaration; function not called
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
     
  5. Apr 21, 2010 at 9:04 PM
    #5
    tarheelfan_08

    tarheelfan_08 [OP] Carolina Alliance

    Joined:
    Jan 4, 2008
    Member:
    #4098
    Messages:
    2,944
    Gender:
    Male
    First Name:
    Justin
    North Carolina
    Vehicle:
    2010 White 4x4 Double Cab Tacoma Short Bed
    Chrome Grill, Chrome accessories(door handles and mirror covers), LEER Super White Cover, Mirrors with Turn Signals, Window Vent Visors, Step Rails, WeatherTech Digital Floor Mats, Mini Maglight Holder, Chrome Bull Bar
    I updated my coe and got it going guys but I have one final problem...my year is showing up wrong in the final out put!

    Code:
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <functional>
    #include <algorithm>
    #include <string>
    #include <cstdlib>
    #include <sstream>
    using namespace std;
    
    //Car Class
    class Car
    {
    private:
        class StackNode
        {
            friend class Car;
            string word;
            string wordTwo;
            string wordThree;
            int value;
            int valueTwo;
            StackNode *next;
    
            //Constructor
            StackNode(string word1, string word2, string word3, int value1, int value2, StackNode *next1 = NULL)
            {
                word = word1;
                wordTwo = word2;
                wordThree = word3;
                value = value1;
                value = value2;
                next = next1;
            }
        };
        StackNode *top;
    
        //Car Class information
        string make;  //make
        string model; // model
        string color;  // color
        int year;  // year
        int mileage;  // miles on car
    
    public:
        Car() { top = NULL; }
            void push(string, string, string, int, int);
            void pop(string &, string &, string &, int &, int &);
            bool isEmpty();
    
            //Constructor that will set information for a new car
            void New_vehicle (string a, string b, string c, int d, int e) 
            {make = a; model = b; color = c; year = d; mileage = e;}
            
            Car(string, string, string, int, int);
            //Stack Information
        
            //mutator and accessor functions
            void setMake(string);
            void setModel(string);
            void setColor(string);
            void setYear(int);
            void setMileage(int);
    
            string getMake();
            string getModel();
            string getColor();
            int getYear();
            int getMileage();
    
                //Check mileage to see if valid
            void valid_mileage(int);
            void car_details();
            string string_car_details();
        
    
    
    };
    
    //Sets to default values
    
            // My Vehicle set up(Make, model, color, year, mileage)
    Car::Car(string make, string model, string color, int year, int mileage) {
        this->make =  make;
        this->model = model;
        this->color = color;
        this->year = year;
        valid_mileage(mileage);
    }
    
    
    void Car::setMake(string make) {
        Car::make = make;
    }
    
    void Car::setModel(string model) {
        Car::model = model;
    }
    
    void Car::setColor(string color) {
        Car::color = color;
    }
    
    void Car::setYear(int year) {
        Car::year = year;
    }
    
    void Car::setMileage(int mileage) {
        valid_mileage(mileage);
    }
    
    
    string Car::getMake() {
        return make;
    }
    string Car::getModel() {
        return model;
    }
    string Car::getColor() {
        return color;
    }
    int Car::getYear() {
        return year;
    }
    int Car::getMileage() {
        return mileage;
    }
    
    
    void Car::valid_mileage(int mileage) {
        if (mileage>=0)
            Car::mileage=mileage;
        else {
            Car::mileage=0;
            cout << "WARNING! You have entered invalid mileage!\n";
            }
        }
    
            void Car::car_details() {
                cout << "The current car is a " << year << ' ' << color << ' '
                            << make << ' ' << model << " with " << mileage << " miles.\n\n";
            }
    
    
    
            string Car::string_car_details() {
                stringstream buf;
                buf << "The current car is a " << year << ' ' << color << ' '
                << make << ' ' << model << " with " << mileage << " miles.\n\n";
                return buf.str();
            }
    
    Code:
    #include "CarClass.h"
    using namespace std;
    
    //Push arguments onto stack
    void Car::push(string make, string model, string color, int year, int mileage)
    {
        top = new StackNode(make, model, color, year, mileage, top);
    }
    
    //Pop removed value at top of stack and copies it to variable
    void Car::pop(string &make, string &model, string &color, int &year, int &mileage)
    {
        StackNode *temp;
        if (isEmpty())
        {
            cout << "The stack is empty.\n";
            exit(1);
        }
        else //Pop value off top of stack
        {
            make = top->word;
            model = top->wordTwo;
            color = top->wordThree;
            year = top->value;
            mileage = top->valueTwo;
            temp = top;
            top = top->next;
            delete temp;
        }
    }
    
    //Returns true if stack is empty or false otherwise
    bool Car::isEmpty()
    {
        if(!top)
            return true;
        else
            return false;
    }
    
    
    int main() {
        
        Car stack;
        string catchWord;
        string catchWord2;
        string catchWord3;
        int catchVal;
        int catchVal2;
        //Push information
        cout << "Pushing first car \n";
        stack.push("Porsche", "911", "Silver", 2005, 45000);
        cout << "Pushing second car \n";
        stack.push("Ford", "Mustang", "Red", 2007, 12600);
        cout << "Pushing third car \n";
        stack.push("Voltzwagon", "Jetta", "Black", 2006, 20218);
        cout << "Pushing fourth car \n";
        stack.push("Jeep", "Cherokee", "White", 2000, 98322);
        cout << "Pushing fifth car \n";
        stack.push("Nissan", "Sentra", "Red", 2002, 76046);
        cout << "Pushing sixth car \n";
        stack.push("Voltzwagon", "Beetle", "Black", 2005, 28031);
    
        cout << "Popping...\n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal2, catchVal);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal2, catchVal);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal2, catchVal);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal2, catchVal);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal2, catchVal);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal2, catchVal);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        cout << "\n Attempting to pop again... ";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal2, catchVal);
    
    
        return 0;
    }
    
    Untitled.jpg
     
  6. Apr 22, 2010 at 5:41 PM
    #6
    tarheelfan_08

    tarheelfan_08 [OP] Carolina Alliance

    Joined:
    Jan 4, 2008
    Member:
    #4098
    Messages:
    2,944
    Gender:
    Male
    First Name:
    Justin
    North Carolina
    Vehicle:
    2010 White 4x4 Double Cab Tacoma Short Bed
    Chrome Grill, Chrome accessories(door handles and mirror covers), LEER Super White Cover, Mirrors with Turn Signals, Window Vent Visors, Step Rails, WeatherTech Digital Floor Mats, Mini Maglight Holder, Chrome Bull Bar
    Sweet, got it fixed! Now I got 2 questions! If I wanted to edit a car in the stack how would I do this! And if you wanted to add more cars to the stack would you just make a larger pop??

    Code:
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <functional>
    #include <algorithm>
    #include <string>
    #include <cstdlib>
    #include <sstream>
    using namespace std;
    
    //Car Class
    class Car
    {
    private:
        class StackNode
        {
            friend class Car;
            string word;
            string wordTwo;
            string wordThree;
            int value;
            int valueTwo;
            StackNode *next;
    
            //Constructor
            StackNode(string word1, string word2, string word3, int value1, int value2, StackNode *next1 = NULL)
            {
                word = word1;
                wordTwo = word2;
                wordThree = word3;
                value = value1;
                valueTwo = value2;
                next = next1;
            }
        };
        StackNode *top;
    
        //Car Class information
        string make;  //make
        string model; // model
        string color;  // color
        int year;  // year
        int mileage;  // miles on car
    
    public:
        Car() { top = NULL; }
            void push(string, string, string, int, int);
            void pop(string &, string &, string &, int &, int &);
            bool isEmpty();
    
            //Constructor that will set information for a new car
            void New_vehicle (string a, string b, string c, int d, int e) 
            {make = a; model = b; color = c; year = d; mileage = e;}
            
            Car(string, string, string, int, int);
            //Stack Information
        
            //mutator and accessor functions
            void setMake(string);
            void setModel(string);
            void setColor(string);
            void setYear(int);
            void setMileage(int);
    
            string getMake();
            string getModel();
            string getColor();
            int getYear();
            int getMileage();
    
                //Check mileage to see if valid
            void valid_mileage(int);
            void car_details();
            string string_car_details();
        
    
    
    };
    
    //Sets to default values
    
            // My Vehicle set up(Make, model, color, year, mileage)
    Car::Car(string make, string model, string color, int year, int mileage) {
        this->make =  make;
        this->model = model;
        this->color = color;
        this->year = year;
        valid_mileage(mileage);
    }
    
    
    void Car::setMake(string make) {
        Car::make = make;
    }
    
    void Car::setModel(string model) {
        Car::model = model;
    }
    
    void Car::setColor(string color) {
        Car::color = color;
    }
    
    void Car::setYear(int year) {
        Car::year = year;
    }
    
    void Car::setMileage(int mileage) {
        valid_mileage(mileage);
    }
    
    
    string Car::getMake() {
        return make;
    }
    string Car::getModel() {
        return model;
    }
    string Car::getColor() {
        return color;
    }
    int Car::getYear() {
        return year;
    }
    int Car::getMileage() {
        return mileage;
    }
    
    
    void Car::valid_mileage(int mileage) {
        if (mileage>=0)
            Car::mileage=mileage;
        else {
            Car::mileage=0;
            cout << "WARNING! You have entered invalid mileage!\n";
            }
        }
    
            void Car::car_details() {
                cout << "The current car is a " << year << ' ' << color << ' '
                            << make << ' ' << model << " with " << mileage << " miles.\n\n";
            }
    
    
    
            string Car::string_car_details() {
                stringstream buf;
                buf << "The current car is a " << year << ' ' << color << ' '
                << make << ' ' << model << " with " << mileage << " miles.\n\n";
                return buf.str();
            }
    
    Code:
    #include "CarClass.h"
    using namespace std;
    
    //Push arguments onto stack
    void Car::push(string make, string model, string color, int year, int mileage)
    {
        top = new StackNode(make, model, color, year, mileage, top);
    }
    
    //Pop removed value at top of stack and copies it to variable
    void Car::pop(string &make, string &model, string &color, int &year, int &mileage)
    {
        StackNode *temp;
        if (isEmpty())
        {
            cout << "The stack is empty.\n";
            exit(1);
        }
        else //Pop value off top of stack
        {
            make = top->word;
            model = top->wordTwo;
            color = top->wordThree;
            year = top->value;
            mileage = top->valueTwo;
            temp = top;
            top = top->next;
            delete temp;
        }
    }
    
    //Returns true if stack is empty or false otherwise
    bool Car::isEmpty()
    {
        if(!top)
            return true;
        else
            return false;
    }
    
    
    int main() {
        
        Car stack;
        string catchWord;
        string catchWord2;
        string catchWord3;
        int catchVal;
        int catchVal2;
        //Push information
        cout << "Pushing first car \n";
        stack.push("Porsche", "911", "Silver", 2005, 45000);
        cout << "Pushing second car \n";
        stack.push("Ford", "Mustang", "Red", 2007, 12600);
        cout << "Pushing third car \n";
        stack.push("Voltzwagon", "Jetta", "Black", 2006, 20218);
        cout << "Pushing fourth car \n";
        stack.push("Jeep", "Cherokee", "White", 2000, 98322);
        cout << "Pushing fifth car \n";
        stack.push("Nissan", "Sentra", "Red", 2002, 76046);
        cout << "Pushing sixth car \n\n";
        stack.push("Voltzwagon", "Beetle", "Black", 2005, 28031);
    
        cout << "Popping...\n\n";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n";
        
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
        cout << "The current car is a " << catchVal << " " << catchWord3<< " " << catchWord << " " << catchWord2 << " with " << catchVal2 <<" miles. \n\n";
        
        cout << "\nAttempting to pop again... ";
        stack.pop(catchWord, catchWord2, catchWord3, catchVal, catchVal2);
    
    
        return 0;
    }
    
     
  7. Apr 23, 2010 at 7:08 AM
    #7
    ocabj

    ocabj Well-Known Member

    Joined:
    Aug 24, 2009
    Member:
    #21681
    Messages:
    127
    Gender:
    Male
    Riverside, CA
    Vehicle:
    2010 Pyrite Mica Tacoma Standard Cab
    How you edit something in a stack is probably going to be defined by the conditions of your homework assignment (this is a homework assignment, right?). Personally, I'd just reuse the edit function you used in your linked list assignment.

    As far as deleting from the stack that's not on the top (like in the middle), you would technically have to pop items off the stack and push them onto another stack until you get to the item you want to remove, do your delete, then pop each item off the temp stack and push them back on your primary stack. This is the correct implementation of a stack since a stack is a restricted data structure defined by the LIFO characteristics and can only add or remove from the top of the data structure.
     
  8. Apr 23, 2010 at 12:38 PM
    #8
    tarheelfan_08

    tarheelfan_08 [OP] Carolina Alliance

    Joined:
    Jan 4, 2008
    Member:
    #4098
    Messages:
    2,944
    Gender:
    Male
    First Name:
    Justin
    North Carolina
    Vehicle:
    2010 White 4x4 Double Cab Tacoma Short Bed
    Chrome Grill, Chrome accessories(door handles and mirror covers), LEER Super White Cover, Mirrors with Turn Signals, Window Vent Visors, Step Rails, WeatherTech Digital Floor Mats, Mini Maglight Holder, Chrome Bull Bar
    Yea that linked list never worked! I could not ever figure it out!
     

Products Discussed in

To Top