先决条件: C++ 中的运算符重载,C++ 中的链表
C++ 附带的库提供了执行输入和输出的方法。在 C++ 中,输入和输出作为字节序列执行,也称为流。输入和输出流由 iostream 库管理。 cin和cout是输入流和输出流的标准对象。
我们可以重载‘>>’和‘<<‘运算符以获取链表中的输入并在 C++ 中打印链表中的元素。它能够为运算符提供数据类型的特殊含义,这种能力被称为操作符重载。
重载运算符的语法是:
returnType operator symbol (arguments)
{
Operations...
}
重载 istream运算符“>>”:
istream& operator>>(istream& is, node*& head)
{
// Function call to overload the ">>"
// operator
takeInput(head);
}
解释:
上述函数的返回类型是对 istream 对象的引用。在语句“ cin >> head”中; “, cin 是第一个参数,对 head 的引用是该函数的第二个参数。当执行任何此类语句时,将调用上述函数。
重载 ostream运算符“<<”:
ostream& operator<<(ostream& os, node* head)
{
// Function call to overload the "<<"
// operator
print(head);
}
解释:
上述函数的返回类型是对 ostream 对象的引用。在语句“ cout << head; “,cout 是第一个参数,对 head 的引用是该函数的第二个参数。当执行任何此类语句时,将调用上述函数。
‘<>’运算符的重载代码:
下面是重载‘>>’和‘<<‘运算符,它以数字N作为连续输入,并将数字N插入链表中,直到N = -1。
// C++ program to demonstrate the
// overloading of '<<' and '>>'
// operators
#include
using namespace std;
// Class for each node object
// of the linked list
class node {
public:
// Node of the linked list
int data;
node* next;
// Constructor of node class
node(int d)
{
data = d;
next = NULL;
}
};
// Insert a node at head of linked
// list
void insertAtHead(node*& head, int d)
{
node* n = new node(d);
n->next = head;
head = n;
}
// Insert a node at tail of linked
// list
void insertAtTail(node* head, int data)
{
// Make new node using
// constructor
node* n = new node(data);
node* temp = head;
// Traverse till we get to end of
// the linked list
while (temp->next != NULL)
temp = temp->next;
// Append the new node n at the end
// of the linked list
temp->next = n;
}
// Print the node at the linked list
void print(node* head)
{
// Print the first Node
if (head != NULL) {
cout << head->data;
head = head->next;
}
// Traverse till head traverse
// till end
while (head != NULL) {
cout << "->" << head->data;
head = head->next;
}
}
// Function that takes continuous input
// until user enter -1 while initializing
// the linked list.
void takeInput(node*& head)
{
int n;
cin >> n;
// If n is not equals to -1 insert
// the node in the linked list
while (n != -1) {
// If head is NULL, insert at
// the beginning of list
if (head == NULL)
insertAtHead(head, n);
else
insertAtTail(head, n);
cin >> n;
}
}
// Overloading the ostream operator '<<'
// to print the complete linked list from
// beginning
ostream& operator<<(ostream& os, node* head)
{
print(head);
}
// Overloading the istream operator '>>'
// to take continuous input into the linked
// list until user inputs -1
istream& operator>>(istream& is, node*& head)
{
takeInput(head);
}
// Driver Code
int main()
{
// initialise head to NULL
node* head = NULL;
// Overloading of '>>' for inserting
// element in the linked list
cin >> head;
// Overloading of '<<' for printing
// element in the linked list
cout << head;
return 0;
}
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live