队列是包含元素集合的抽象数据结构。队列执行FIFO机制,即,首先插入的元素也将首先删除。换句话说,最近最少添加的元素首先在队列中被删除。
使用链表实现队列的程序如下:
#include <iostream> using namespace std; struct node { int data; struct node *next; }; struct node* front = NULL; struct node* rear = NULL; struct node* temp; void Insert() { int val; cout<<"Insert the element in queue : "<<endl; cin>>val; if (rear == NULL) { rear = (struct node *)malloc(sizeof(struct node)); rear->next = NULL; rear->data = val; front = rear; } else { temp=(struct node *)malloc(sizeof(struct node)); rear->next = temp; temp->data = val; temp->next = NULL; rear = temp; } } void Delete() { temp = front; if (front == NULL) { cout<<"Underflow"<<endl; return; } else if (temp->next != NULL) { temp = temp->next; cout<<"Element deleted from queue is : "<<front->data<<endl; free(front); front = temp; } else { cout<<"Element deleted from queue is : "<<front->data<<endl; free(front); front = NULL; rear = NULL; } } void Display() { temp = front; if ((front == NULL) && (rear == NULL)) { cout<<"Queue is empty"<<endl; return; } cout<<"Queue elements are: "; while (temp != NULL) { cout<<temp->data<<" "; temp = temp->next; } cout<<endl; } int main() { int ch; cout<<"1) Insert element to queue"<<endl; cout<<"2) Delete element from queue"<<endl; cout<<"3) Display all the elements of queue"<<endl; cout<<"4) Exit"<<endl; do { cout<<"Enter your choice : "<<endl; cin>>ch; switch (ch) { case 1: Insert(); break; case 2: Delete(); break; case 3: Display(); break; case 4: cout<<"Exit"<<endl; break; default: cout<<"Invalid choice"<<endl; } } while(ch!=4); return 0; }
输出结果
上面程序的输出如下
1) Insert element to queue 2) Delete element from queue 3) Display all the elements of queue 4) Exit Enter your choice : 1 Insert the element in queue : 4 Enter your choice : 1 Insert the element in queue : 3 Enter your choice : 1 Insert the element in queue : 5 Enter your choice : 2 Element deleted from queue is : 4 Enter your choice : 3 Queue elements are : 3 5 Enter your choice : 7 Invalid choice Enter your choice : 4 Exit
在上面的程序中,该函数Insert()
将元素插入队列。如果Rear为NULL,则队列为空,并插入单个元素。否则,在后方插入具有所需元素的节点,然后将该节点设置为后方。这如下所示-
void Insert() { int val; cout<<"Insert the element in queue : "<<endl; cin>>val; if (rear == NULL) { rear = (struct node *)malloc(sizeof(struct node)); rear->next = NULL; rear->data = val; front = rear; } else { temp=(struct node *)malloc(sizeof(struct node)); rear->next = temp; temp->data = val; temp->next = NULL; rear = temp; } }
在函数中Delete()
,如果队列中没有元素,则为下溢状态。如果队列中只有一个元素被删除,并且前台和后方设置为NULL。否则,将删除前面的元素,并且前面的元素指向下一个元素。这如下所示-
void Delete() { temp = front; if (front == NULL) { cout<<"Underflow"<<endl; return; } else if (temp->next != NULL) { temp = temp->next; cout<<"Element deleted from queue is : "<<front->data<<endl; free(front); front = temp; } else { cout<<"Element deleted from queue is : "<<front->data<<endl; free(front); front = NULL; rear = NULL; } }
在函数中display()
,如果front和tail为NULL,则queue为空。否则,将在temp变量的帮助下使用while循环显示所有队列元素。这如下所示-
void Display() { temp = front; if ((front == NULL) && (rear == NULL)) { cout<<"Queue is empty"<<endl; return; } cout<<"Queue elements are: "; while (temp != NULL) { cout<<temp->data<<" "; temp = temp->next; } cout<<endl; }
main()
如果用户要插入,删除或显示队列,该功能将为用户提供一个选择。根据用户响应,使用开关调用适当的功能。如果用户输入无效的响应,则将其打印出来。下面的代码片段如下-
int main() { int ch; cout<<"1) Insert element to queue"<<endl; cout<<"2) Delete element from queue"<<endl; cout<<"3) Display all the elements of queue"<<endl; cout<<"4) Exit"<<endl; do { cout<<"Enter your choice : "<<endl; cin>>ch; switch (ch) { case 1: Insert(); break; case 2: Delete(); break; case 3: Display(); break; case 4: cout<<"Exit"<<endl; break; default: cout<<"Invalid choice"<<endl; } } while(ch!=4); return 0; }