Я пытаюсь реализовать стек, используя двойной список. Я знаю, что функции для моего класса стека (push, pop) должны содержать вызовы функций-членов моего дважды связанного класса списка, но у меня возникают проблемы с его реализацией.C++ Stack используя двусвязный список
dlist.cpp:
#include <iostream>
#include <fstream>
#include <string>
#include "dlist.hpp"
using namespace std;
void dlist::appendNodeFront(int shares, float pps){
Node *n = new Node(shares, pps);
if(front == NULL){
front = n;
back = n;
}
else {
front->prev = n;
n->next = front;
front = n;
}
}
void dlist::appendNodeBack(int shares, float pps){
Node *n = new Node(shares, pps);
if(back == NULL){
front = n;
back = n;
}
else {
back->next = n;
n->prev = back;
back = n;
}
}
void dlist::display(){
Node *temp = front;
cout << "List contents: ";
while(temp != NULL){
cout << temp->value << " ";
temp = temp->next;
}
cout << endl;
}
void dlist::display_reverse(){
Node *temp = back;
cout << "List contents in reverse: ";
while(temp != NULL){
cout << temp->value << " ";
temp = temp->prev;
}
cout << endl;
}
void dlist::destroyList(){
Node *T = back;
while(T != NULL){
Node *T2 = T;
T = T->prev;
delete T2;
}
front = NULL;
back = NULL;
}
stack.cpp:
#include <iostream>
#include <fstream>
#include <string>
#include "stack.hpp"
using namespace std;
stack::stack(){
int i;
for(i = 0; i < 1500; i++){
shares[i] = 0;
pps[i] = 0;
}
first = 0;
}
void stack::push(int num, float price){
if(first ==(1500-1)){
cout << "Stack is full" << endl;
return;
}
first++;
shares[first] = num;
pps[first] = price;
return;
}
void stack::pop(int *num, float *price){
if(first == -1){
cout << "Stack is empty" << endl;
return;
}
num = &shares[first];
price = &pps[first];
cout << shares[first] << endl;
cout << pps[first] << endl;
shares[first] = 0;
pps[first] = 0;
first--;
return;
}
Если функция толчок в стеке быть в основном вызов appendNodeFront()
или appendNodeback()
? Любая помощь или совет приветствуются!
Пуш следует добавить элемент в конец стека, так appendNodeback() является правой функцией вызова. Для поп-операции вам нужно удалить последний элемент, вставленный в стек, поэтому вам придется реализовать функцию removeLastNode(). – StaticBeagle
Кажется, что эти функции имеют смешанные обязанности. Например, создайте узел и добавьте его где-нибудь. Все может быть проще, когда вы разделяете обязанности. Эй, у этой концепции даже есть [своя страница Википедии] (https://en.wikipedia.org/wiki/Single_responsibility_principle)! Вау. –
Два сценария: нажмите от головы/поп из головы или нажмите из хвоста/поп из хвоста. Дело в том, что последний вставленный элемент должен быть первым удаленным элементом (LIFO). – 0x499602D2