我的Dequeue()功能无法正常工作
my DeQueue() function is not working properly
当我运行删除函数时,它为我提供了一些垃圾值。有什么问题?
#include<iostream>
#include<process.h>
#include<conio.h>
using namespace std;
class circularqueue
{
int arr[5];
int front,rear;
int size;
int count;
public:
circularqueue()
{
count = -1;
front=-1;
rear=-1;
size=5;
}
void display();
void enqueue(int val);
void delete_element();
bool Is_empty();
};
bool circularqueue::Is_empty(){
if(front == -1 && rear == -1){
return true;
}
else {
return false;
}
}
void circularqueue :: display()
{
int F = front;
for(count; count!=0;count--){
cout<<"-----------"<<endl;
cout<<"ID is : "<<arr[F]<<endl;
cout<<"-----------"<<endl;
F++;
if(count == (size-1)){
F=0;
}
else if(count == -1){
cout<<"Empty"<<endl;
}
}
}
void circularqueue :: enqueue(int val)
{
if(Is_empty()){
// cout<<"Queue is empty "<<endl;
++front;
++rear;
arr[rear] = val;
}
else if(front == 0 and rear == (size-1)){
cout<<"Queue is Full"<<endl;
}
else if(front==0 && rear == 0){
if(rear<=(size-1)){
arr[rear]= val;
rear = rear+1;
}
}
else if(front!=0 && rear == (size-1)){
rear=0;
arr[rear]=val;
rear =rear+1;
}
else {
arr[rear] = val;
rear=rear+1;
}
count++;
}
当我运行此代码时,删除函数无法正常工作,请告诉我修复。
它给出了我的一些垃圾价值,看起来像一个无限的环路
void circularqueue :: delete_element()
{
if(Is_empty()){
cout<<"The Queue is empty"<<endl;
}
else if(front==(size-1)){
front = 0;
}
else if(front == rear){
front = -1;
rear = -1;
}
else
{
cout<<"Number Deleted : "<<front<<endl;
front = front+1;
}
count--;
}
int main()
{
circularqueue obj;
int num;
int ch;
char ch1;
jb: cout<<" 1 - EnQUEue 2- DeQueue 3- Display"<<endl;
cin>>ch;
switch(ch){
case 1:{
cout<<"Enter Number : "<<endl;
cin>>num;
obj.enqueue(num);
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
case 2:{
obj.delete_element();
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
case 3:{
obj.display();
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
default :{
cout<<"Invalid entery "<<endl;
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
}
}
我制作了您的代码的compacter版本,该版本执行相同的任务。
#include<iostream>
using namespace std;
class CircularQueue{
int arr[10], front, rear, size;
const int max_size=sizeof(arr)/sizeof(int);
public:
CircularQueue(){ front = rear = size = 0; }
bool isEmpty(){ return front==rear; } // or simply size == 0
bool isFull(){ return (rear+1)%max_size == front; } // or simply size == max_size - 1
void enQueue(int val){
if( isFull() ){
cout << "Queue is Full" << endl;
return;
}
arr[rear] = val;
rear = (rear+1)%max_size;
size++;
}
int deQueue(){
if( isEmpty() ){
cout << "Queue is Empty" << endl;
return -1;
}
int ans = arr[front];
front = (front+1)%max_size;
size--;
return ans;
}
void display(){
if( isEmpty() ){
cout << "nothing to display" << endl;
return;
}
for( int i=0; i<size; i++ ){
cout<<"-----------"<<endl;
cout<<"ID is : "<<arr[(i+front)%max_size]<<endl;
cout<<"-----------"<<endl;
}
}
};
int main(){
CircularQueue ob;
bool break_loop=false;
while( !break_loop ){
cout << "1 Enqueue, 2 Dequeue, 3 Display 4 Quit nOption = ";
int input; cin >> input;
int tmp;
switch(input){
case 1 :
cout << "Enter number " << endl;
cin >> tmp;
ob.enQueue(tmp);
break;
case 2 :
tmp = ob.deQueue();
if( tmp != -1 ) cout << "Element " << tmp << " deleted" <<endl;
break;
case 3 :
ob.display();
break;
case 4 :
break_loop = true;
break;
default :
break;
}
}
return 0;
}
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程