迴圈佇列—— C++ 中的插入和刪除操作
佇列是一種包含元素集合的抽象資料結構。佇列實現先入先出的機制,即先插入的元素也會先刪除。
佇列可以是一種線性資料結構。但如果我們使用陣列實現佇列,可能會產生一些問題。有時透過使用一些連續的插入和刪除操作,前後位置會發生變化。那時,佇列看起來沒有空間可以插入元素。即使有一些空閒空間,由於一些邏輯問題,也不能使用。為了克服這個問題,我們將使用迴圈佇列資料結構。
迴圈佇列是一種佇列,其中最後一個位置連線到第一個位置,形成一個迴圈。
演算法
insert(queue, key) -
begin if front = 0 and rear = n – 1, or front = rear + 1, then queue is full, and return otherwise if front = -1, then front = 0 and rear = 0 else if rear = n – 1, then, rear = 0, else rear := rear + 1 queue[rear] = key end
delete(queue) -
begin if front = -1 then queue is empty, and return otherwise item := queue[front] if front = rear, then front and rear will be -1 else if front = n – 1, then front := 0 else front := front + 1 end
示例
#include <iostream>
using namespace std;
int cqueue[5];
int front = -1, rear = -1, n=5;
void insertCQ(int val) {
if ((front == 0 && rear == n-1) || (front == rear+1)) {
cout<<"Queue Overflow \n";
return;
}
if (front == -1) {
front = 0;
rear = 0;
}
else {
if (rear == n - 1)
rear = 0;
else
rear = rear + 1;
}
cqueue[rear] = val ;
}
void deleteCQ() {
if (front == -1) {
cout<<"Queue Underflow\n";
return ;
}
cout<<"Element deleted from queue is : "<<cqueue[front]<<endl;
if (front == rear) {
front = -1;
rear = -1;
}
else {
if (front == n - 1)
front = 0;
else
front = front + 1;
}
}
void displayCQ() {
int f = front, r = rear;
if (front == -1) {
cout<<"Queue is empty"<<endl;
return;
}
cout<<"Queue elements are :\n";
if (f <= r) {
while (f <= r){
cout<<cqueue[f]<<" ";
f++;
}
}
else {
while (f <= n - 1) {
cout<<cqueue[f]<<" ";
f++;
}
f = 0;
while (f <= r) {
cout<<cqueue[f]<<" ";
f++;
}
}
cout<<endl;
}
int main() {
int ch, val;
cout<<"1)Insert\n";
cout<<"2)Delete\n";
cout<<"3)Display\n";
cout<<"4)Exit\n";
do {
cout<<"Enter choice : "<<endl;
cin>>ch;
switch(ch) {
case 1:
cout<<"Input for insertion: "<<endl;
cin>>val;
insertCQ(val);
break;
case 2:
deleteCQ();
break;
case 3:
displayCQ();
break;
case 4:
cout<<"Exit\n";
break;
default: cout<<"Incorrect!\n";
}
} while(ch != 4);
return 0;
}輸出
1)Insert 2)Delete 3)Display 4)Exit Enter choice : 1 Input for insertion: 10 Enter choice : 1 Input for insertion: 20 Enter choice : 1 Input for insertion: 30 Enter choice : 1 Input for insertion: 40 Enter choice : 1 Input for insertion: 50 Enter choice : 3 Queue elements are : 10 20 30 40 50 Enter choice : 2 Element deleted from queue is : 10 Enter choice : 2 Element deleted from queue is : 20 Enter choice : 3 Queue elements are : 30 40 50 Enter choice : 4 Exit
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP