Я пытаюсь написать программу, которая реализует стек, используя связанные списки, принимает неограниченное количество слов от пользователя до тех пор, пока не будет введено слово «конец», нажмите каждое слово в стек, напечатайте пользователю, что вы приняли слова, а вы «перечислить предложение в обратном порядке и поместить каждое слово пользователю, чтобы они отображались в обратном порядке, из которого они были введены. У меня есть код написанный, но я думаю, что что-то может быть неправильно с моей функцией pop, потому что это не печать в обратном порядке. Просто заказ, в который я ввел информацию, что означает, что он не появляется, не так ли? Я не уверен.Не знаете, как отменить мой стек?
Так что просто нужно помочь выяснить, как -pop каждое слово для пользователя, так что они появляются в обратном порядке, от которого они были введены
Спасибо! Вот мой код:
функция#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
class node
{
public:
class node *next;
string data;
};
class stack : public node
{
node *head;
int tos;
public:
stack()
{
tos=-1;
}
void push(string x)
{
if (tos < 0)
{
head =new node;
head->next=NULL;
head->data=x;
tos ++;
}
else
{
node *temp,*temp1;
temp=head;
tos++;
while(temp->next != NULL)
temp=temp->next;
temp1=new node;
temp->next=temp1;
temp1->next=NULL;
temp1->data=x;
}
}
void display()
{
node *temp;
temp=head;
if (tos < 0)
{
cout <<" stack under flow";
return;
}
while(temp != NULL)
{
cout <<temp->data<< " ";
temp=temp->next;
}
}
void pop()
{
node *temp;
temp=head;
if(tos < 0)
{
cout <<"stack under flow";
return;
}
tos--;
while(temp->next->next!=NULL)
{
temp=temp->next;
}
temp->next=NULL;
}
};
main()
{
stack s1;
string input;
while (input != "end"){
cout <<"\n enter a element";
cin >> input;
s1.push(input);
}
s1.pop();
s1.display();
exit(0);
return (0);
}
Если это должно быть ** стек **, ваша логика вставки не имеет смысла. Стеки представляют собой LIFO. что означает единственный указатель, который вам нужно возиться с * push *, - это указатель на голову; **Когда-либо**. Ваш узел узла next-ptr указывает на текущую головку, затем голова устанавливается на новый узел. – WhozCraig
(Что касается реверсирования, все идет.) Все, что вам нужно, это один временный узел. Узнайте, сколько записей в векторе. Затем вы петлите. Возьмите узел [0] и назначьте его temp. Затем возьмите узел [last] и назначьте его узлу [0], затем установите node [last] = temp. –
Ваш вопрос помечен C++, но вы '#include' и другие вещи. В C++ у нас есть 'std :: stack ', если вам разрешено использовать его. –
5gon12eder