二重リンクリストを使用してスタックを実装しようとしています。私は私のスタッククラス(push、pop)の関数は、二重リンクリストクラスのメンバ関数への呼び出しを含むべきであることを知っていますが、実際にそれを実装する際に問題があります。二重リンクリストを使用したC++スタック
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ので()コールする適切な関数です。 pop操作では、スタックに最後に挿入された要素を削除する必要があるため、removeLastNode()関数を実装する必要があります。 – StaticBeagle
これらの機能には責任が混在しているようです。たとえば、ノードを作成してどこかに追加します。責任を分け合わせると、事柄はより簡単になります。ちょっと、そのコンセプトにも[独自のWikipediaのページ](https://en.wikipedia.org/wiki/Single_responsibility_principle)があります!ウワ –
2つのシナリオ:ヘッドからポップ/ポップ、またはテールからポップ/ポップをテールから押します。要点は、最後に挿入された要素が最初に削除された要素(LIFO)であることです。 – 0x499602D2