C ++程序使用链接列表实现队列

队列是包含元素集合的抽象数据结构。队列执行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;

}

以上是 C ++程序使用链接列表实现队列 的全部内容, 来源链接: utcz.com/z/354988.html

回到顶部