使用鏈表實現的隊列:
typedef struct queueNode
{
int val;
queueNode* next;
}Node;
class queue
{
public:
queue()
{
front=NULL;
back=NULL;
};
bool empty()
{
if (front==NULL||back==NULL)
{
return true;
}
return false;
};
void push(int data)
{//在鏈表尾巴上插入 從尾巴入隊
if (empty())
{
front=new Node;
front->val=data;
back=front;
back->next=NULL;
return ;
}
back->next=new Node;
back=back->next;
back->val=data;
back->next=NULL;
return ;
};
bool pop(int& data)
{ //從將尾巴的移到前一個
if (empty())
{
return false;
}
if (back==front)
{
data=front->val;
delete front;
back=NULL;
front=NULL;
return true;
}
data=front->val;
Node* temp=front;
Node* pre=NULL;
while (temp->next!=NULL)
{
pre=temp;
temp->val=temp->next->val;
temp=temp->next;
}
//temp代表尾節點
//delete temp 並且上個節點的next要設爲NULL
delete temp;
pre->next=NULL;
back=pre;
return true;
};
void print()
{
if (empty())
{
return;
}
Node *temp=front;
while(temp->next!=NULL)
{
cout<<temp->val<<"\t";
temp=temp->next;
}
cout<<temp->val<<"\t";
};
void clear()
{
// //釋放鏈表內存
// if (empty())
// {
// return;
// }
//
// Node *temp=front;
// Node *pre=NULL;
// while(temp->next!=NULL)
// {
// pre=temp;
// temp=temp->next;
// delete pre;
// }
// delete temp;
// temp=NULL;
// front=back=NULL;
int temp;
while(!empty())
{
pop(temp);
}
};
private:
Node *front;
Node *back;
};