#include<bits/stdc++.h>
using namespace std;
typedef int Node_type;
const int MAX = 100;
struct Node {
Node_type entry;
Node* next;
Node(const Node_type add, Node* temp = NULL);
};
Node::Node(const Node_type add, Node* temp)
{
entry = add;
next = temp;
}
class Queue {
private:
Node* front;
Node* rear;
public:
Queue();
void append(const Node_type);
void retrive(Node_type)const;
void serve();
int get_retrive();
void clear();
int size();
bool empty();
bool full();
void operator=(const Queue& origin);
Queue(const Queue& origin);
~Queue();
};
Queue::Queue()
{
front = rear = NULL;
}
void Queue::append(const Node_type item)
{
if (empty()) {
front = new Node(item);
rear = front;
}
else {
rear->next = new Node(item);
rear = rear->next;
}
}
void Queue::retrive(Node_type temp)const
{
temp = front->entry;
}
Node_type Queue::get_retrive()
{
return front->entry;
}
void Queue::serve()
{
if (size() == 1) {
delete front;
front = rear = NULL;
}
else {
Node* temp = front->next;
delete front;
front = temp;
}
}
void Queue::clear()
{
while (!empty())
serve();
}
int Queue::size()
{
int cnt = 0;
Node* temp = front;
while (temp != NULL) {
cnt += 1;
temp = temp->next;
}
return cnt;
}
bool Queue::empty()
{
return !size();
}
bool Queue::full()
{
return !(size() < MAX);
}
void Queue::operator=(const Queue& origin)
{
while (!empty()) clear();
Node* new_Node = NULL, * temp, * last = NULL, * p = origin.front;
if (p != NULL) {
new_Node = new Node(p->entry);
last = new_Node;
temp = new_Node->next;
p = p->next;
}
while (p != NULL) {
temp = new Node(p->entry);
last = temp;
temp = temp->next;
p = p->next;
}
front = new_Node;
rear = last;
}
Queue::Queue(const Queue& origin)
{
Node* new_Node = NULL, * temp, * last = NULL, * p = origin.front;
if (p != NULL) {
new_Node = new Node(p->entry);
last = new_Node;
temp = new_Node->next;
p = p->next;
}
while (p != NULL) {
temp = new Node(p->entry);
last = temp;
temp = temp->next;
p = p->next;
}
front = new_Node;
rear = last;
}
Queue::~Queue()
{
while (!empty())
serve();
}
int main()
{
Queue que;
int number;
while (cin >> number) {
if (number == -1) break;
que.append(number);
cout << number << " " <<que.size() << endl;
}
if (!que.empty()) {
int temp = que.get_retrive();
que.serve();
cout << temp;
}
while (!que.empty()) {
int temp;
que.retrive(temp);
que.serve();
cout << " " << temp;
}
return 0;
}


uj5u.com熱心網友回復:
int temp沒有賦初始值,改成 int temp=xxx; xxx是初始值uj5u.com熱心網友回復:
沒用void Queue::retrive(Node_type temp)const
{
temp = front->entry;
}
Node_type 是int
這樣寫代碼, 怎么可能把結果帶回來呢
典型的形參和實參錯誤問題
需要傳遞int*,或者使用Int& 型別,才可以把temp帶出函式
uj5u.com熱心網友回復:
確實如此,謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93110.html
標籤:C++ 語言
