2012-03-19 72 views
0

這是我的程序的輸出:離隊鏈表

Initial Queue 
40 30 

40 was popped from back 
30 

New Queue 
12 10 8 30 

我有功能的push_back問題,我特靈push 12 10 8 after 30,換句話說,輸出應爲30 8 10 12

任何建議

#include <cstddef> 
class ListNode { 
public: 
ListNode() {next=NULL;}; 
int get_data() {return data;}; 
ListNode * get_next() {return next;}; 
void set_data(int data) {this->data = data;}; 
void set_next(ListNode *next) {this->next = next;}; 
private: 
int data; 
ListNode *next; 
}; 

#include "dequeue.h" 
#include <iostream> 

int main() 
{ 
DeQueue q; 

q.push_back(30); 
q.push_back(40); 
cout << "Initial Queue" << endl; 
cout << q << endl; 


    cout << q.pop_back() << " was popped from back" << endl; 
    cout << q << endl; 
q.push_back(8); 
q.push_back(10); 
q.push_back(12); 
cout << "New Queue" << endl; 
cout << q << endl; 

} 

#include "dequeue.h" 

DeQueue::~DeQueue() 
{ 
delete [] storage; 
} 
int DeQueue::pop_back() 
{ 

if(storage == NULL){ //queue is empty! 
    return -1; //should throw exception 
} 
int return_data = storage->get_data(); 
ListNode *tmp = storage; 

storage = storage->get_next(); 
delete tmp; 
return return_data; 
} 



void DeQueue::push_back(int data)//front 
{ 
ListNode *tmp = new ListNode; 
tmp->set_next(storage); 
tmp->set_data(data); 

storage = tmp; 
} 


ostream & operator <<(ostream &os, DeQueue &q) 
{ 
ListNode *tmp = q.storage; 
while(tmp!=NULL){ 
    os << tmp->get_data() << " "; 
    tmp = tmp->get_next(); 
} 
os << endl; 
return os; 
} 

#include "list.h" 
#include <iostream> 
using namespace std; 

class DeQueue { 
friend ostream & operator <<(ostream &os, DeQueue &q); 
public: 
DeQueue(){storage=NULL;}; 
~DeQueue(); 
int pop_front(); 
int pop_back(); 
void push_front(int data); 
void push_back(int data); 
private: 
ListNode *storage; 
}; 

回答

0

雙端隊列最有可能兩個指針:ListNode *front, *back;,否則它是不可能彈出不回如果你不知道它在哪裏,則遍歷整個deque。你也應該保存這兩個,前一個和下一個元素在你的ListNode

修復之前,不可能正確實施pop_backpush_back