C++ Please help me modify this coding which need to apply a linked list to store the node. Also use a stack concept.   The code: #include #include #include using namespace std;   struct node {     char data[100];     struct node* next;      }; int words = 0; // function for add values to stack struct node* add(struct node* stack, char *str) {     struct node* tp = (struct node*)malloc(sizeof(struct node));     strcpy(tp->data,str);     tp->next = stack;     words++;     return tp;      } //redo function void redo(struct node* stack) {     if(stack == NULL)     return;     words++; } //undo function void undo(struct node* stack) {     if(stack == NULL)     return;     words--; } //print function int print(struct node* stack,int idx) {     if(stack == NULL)     return 0;     idx = print(stack->next,idx);     if(idxdata;     return idx+1; } //function for save in file int save_words(FILE* filePointer, struct node* stack,int idx) {     if(stack == NULL)     {         return 0;         }                  idx = save_words(filePointer, stack->next,idx);         if(idxdata);         return idx+1; } //main function int main() {     //stacks for undo and redo     struct node *stack1 = NULL;     char input[100];          while(1==1)     {         cout<<"\n\nYour words > ";         cin.getline(input,100);         if(strcmp("undo",input)==0)         {              //if input is undo             undo(stack1);             cout<<"\nUNDO RESULT: ";             print(stack1,words);             }                          else if(strcmp("redo",input)==0)             {                  //if input is redo                 redo(stack1);                 cout<<"\nREDO RESULT: ";                 print(stack1,words);                 }                                  else if(strcmp("print",input)==0)                 {                      //if input is print                     cout<<"\nPRINT RESULT: ";                     print(stack1,words);                     }                                          else if(strcmp("save", input)==0)                     {                          //if input is save                         cout<<"\nYour words have been saved! ";                         FILE* filePointer;                         filePointer=fopen("output.txt","w");                         save_words(filePointer,stack1,words);                         fclose(filePointer);                         }                                                  else if(strcmp("quit",input)==0) //if input is quit                         {                             FILE* filePointer;                             filePointer=fopen("output.txt","w");                             save_words(filePointer,stack1,words);                             fclose(filePointer);                             cout<<"\nThank you, see you again!";                             exit(0);                             }                                                          else //if input is any other string add to stack                             stack1 = add(stack1,input);     }     return 0; }

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
Question

C++

Please help me modify this coding which need to apply a linked list to store the node. Also use a stack concept.

 

The code:

#include<iostream>
#include<stdlib.h>
#include<string.h>

using namespace std;
 
struct node
{
    char data[100];
    struct node* next;
    
};

int words = 0;

// function for add values to stack
struct node* add(struct node* stack, char *str)
{
    struct node* tp = (struct node*)malloc(sizeof(struct node));
    strcpy(tp->data,str);
    tp->next = stack;
    words++;
    return tp;
    
}

//redo function
void redo(struct node* stack)
{
    if(stack == NULL)
    return;
    words++;

}

//undo function
void undo(struct node* stack)
{
    if(stack == NULL)
    return;
    words--;

}

//print function
int print(struct node* stack,int idx)
{
    if(stack == NULL)
    return 0;
    idx = print(stack->next,idx);
    if(idx<words)
    cout<<"\n"<<stack->data;
    return idx+1;

}

//function for save in file
int save_words(FILE* filePointer, struct node* stack,int idx)
{
    if(stack == NULL)
    {
        return 0;
        }
        
        idx = save_words(filePointer, stack->next,idx);
        if(idx<words)
        fprintf(filePointer,"%s\n",stack->data);
        return idx+1;
}

//main function
int main()
{
    //stacks for undo and redo
    struct node *stack1 = NULL;
    char input[100];
    
    while(1==1)
    {
        cout<<"\n\nYour words > ";
        cin.getline(input,100);
        if(strcmp("undo",input)==0)
        { 
            //if input is undo
            undo(stack1);
            cout<<"\nUNDO RESULT: ";
            print(stack1,words);
            }
            
            else if(strcmp("redo",input)==0)
            { 
                //if input is redo
                redo(stack1);
                cout<<"\nREDO RESULT: ";
                print(stack1,words);
                }
                
                else if(strcmp("print",input)==0)
                { 
                    //if input is print
                    cout<<"\nPRINT RESULT: ";
                    print(stack1,words);
                    }
                    
                    else if(strcmp("save", input)==0)
                    { 
                        //if input is save
                        cout<<"\nYour words have been saved! ";
                        FILE* filePointer;
                        filePointer=fopen("output.txt","w");
                        save_words(filePointer,stack1,words);
                        fclose(filePointer);
                        }
                        
                        else if(strcmp("quit",input)==0) //if input is quit
                        {
                            FILE* filePointer;
                            filePointer=fopen("output.txt","w");
                            save_words(filePointer,stack1,words);
                            fclose(filePointer);
                            cout<<"\nThank you, see you again!";
                            exit(0);
                            }
                            
                            else //if input is any other string add to stack
                            stack1 = add(stack1,input);
    }
    return 0;

}

Expert Solution
steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Concept of memory addresses in pointers
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