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; }
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;
}
Step by step
Solved in 2 steps