如何在函数中使用链表ADT?
How to use linked list ADT in a function?
我正在尝试从另一个队列复制一个队列,但该函数出现以下编译错误:
'class Node' 没有名为 'isEmpty'
的成员
'class Node' 没有名为 'enqueue'
的成员
'class Node' 没有名为 'getFirst'
的成员
'class Node' 没有名为 'dequeue'
的成员
'无法在return
中将'operations*'转换为'Node*'
#include<iostream>
#include "Queue.h"
using namespace std;
Node* copyQueue(Node* q1)
{
operations *q2 = new operations();
while(q1->isEmpty()!= True)
{
q2 -> enqueue( q1 -> getFirst() );
q1 -> dequeue();
}
return q2;
}
int main()
{
operations *q1 = new operations();
int temp, n;
cout << "Enter queue size: ";
cin >> n;
cout << "Enter data to copy: ";
for( int i = 0 ; i < n ; i++ )
{
cin >> temp;
q1 -> enqueue(temp);
}
copyQueue(q1);
cout << "Copied Queue = ";
q2 -> display();
}
queue.h源代码:
#include<iostream>
#include "Node.h"
using namespace std;
class operations
{
public:
Node *front= NULL;
Node *newdata= NULL;
Node *rear= NULL;
void enqueue(int item)
{
newdata = new Node(item);
if(front==NULL && rear == NULL)
{
front = rear = newdata;
}
else
{
rear->next = newdata;
rear = newdata;
}
}
void dequeue()
{
Node *temp = front;
front = front->next;
delete temp;
}
bool isEmpty()
{
if(front == NULL)
return true;
else
return false;
}
int getFirst()
{
return front -> item;
}
void display()
{
Node *temp= front;
while(temp!= NULL)
{
cout<<temp->item<<"->";
temp= temp->next;
}
cout<<endl;
}
};
您的第一个函数的签名不正确。它应该接受一个队列和 return 一个队列,但是您为两者都指定了 Node
。
所以改变:
Node* copyQueue(Node* q1)
至:
operations* copyQueue(operations* q1)
其他一些需要更正的地方:
在 main
你还没有声明 q2
。此外,它不会从 copyQueue
调用中捕获 return 值,因此更改:
copyQueue(q1);
至:
operations *q2 = copyQueue(q1);
True
应该是 true
.
每当队列变空时,dequeue
应将 rear
设置为 NULL
。所以改变:
front = front->next;
delete temp;
至:
front = front->next;
if(front==NULL)
{
rear = NULL;
}
delete temp;
因为 isEmpty()
return 是一个布尔值,你不应该写:
while(q1->isEmpty()!= true)
...但只是:
while(!q1->isEmpty())
出于同样的原因,isEmpty
方法不需要 if...else
。变化:
if(front == NULL)
return true;
else
return false;
至:
return front == NULL;
当front
为NULL
时,rear
也必然如此,所以不需要双重检查:
if(front==NULL && rear == NULL)
可以是:
if(front==NULL)
我正在尝试从另一个队列复制一个队列,但该函数出现以下编译错误:
'class Node' 没有名为 'isEmpty'
的成员'class Node' 没有名为 'enqueue'
的成员'class Node' 没有名为 'getFirst'
的成员'class Node' 没有名为 'dequeue'
的成员'无法在return
中将'operations*'转换为'Node*'#include<iostream>
#include "Queue.h"
using namespace std;
Node* copyQueue(Node* q1)
{
operations *q2 = new operations();
while(q1->isEmpty()!= True)
{
q2 -> enqueue( q1 -> getFirst() );
q1 -> dequeue();
}
return q2;
}
int main()
{
operations *q1 = new operations();
int temp, n;
cout << "Enter queue size: ";
cin >> n;
cout << "Enter data to copy: ";
for( int i = 0 ; i < n ; i++ )
{
cin >> temp;
q1 -> enqueue(temp);
}
copyQueue(q1);
cout << "Copied Queue = ";
q2 -> display();
}
queue.h源代码:
#include<iostream>
#include "Node.h"
using namespace std;
class operations
{
public:
Node *front= NULL;
Node *newdata= NULL;
Node *rear= NULL;
void enqueue(int item)
{
newdata = new Node(item);
if(front==NULL && rear == NULL)
{
front = rear = newdata;
}
else
{
rear->next = newdata;
rear = newdata;
}
}
void dequeue()
{
Node *temp = front;
front = front->next;
delete temp;
}
bool isEmpty()
{
if(front == NULL)
return true;
else
return false;
}
int getFirst()
{
return front -> item;
}
void display()
{
Node *temp= front;
while(temp!= NULL)
{
cout<<temp->item<<"->";
temp= temp->next;
}
cout<<endl;
}
};
您的第一个函数的签名不正确。它应该接受一个队列和 return 一个队列,但是您为两者都指定了 Node
。
所以改变:
Node* copyQueue(Node* q1)
至:
operations* copyQueue(operations* q1)
其他一些需要更正的地方:
在
main
你还没有声明q2
。此外,它不会从copyQueue
调用中捕获 return 值,因此更改:copyQueue(q1);
至:
operations *q2 = copyQueue(q1);
True
应该是true
.
每当队列变空时,dequeue
应将rear
设置为NULL
。所以改变:front = front->next; delete temp;
至:
front = front->next; if(front==NULL) { rear = NULL; } delete temp;
因为
isEmpty()
return 是一个布尔值,你不应该写:while(q1->isEmpty()!= true)
...但只是:
while(!q1->isEmpty())
出于同样的原因,
isEmpty
方法不需要if...else
。变化:if(front == NULL) return true; else return false;
至:
return front == NULL;
当
front
为NULL
时,rear
也必然如此,所以不需要双重检查:if(front==NULL && rear == NULL)
可以是:
if(front==NULL)