【发布时间】:2018-02-11 04:10:42
【问题描述】:
我试图运行它,无论我在队列中插入什么以及插入的数字数量是多少,它都不会显示循环队列。
这些是我想要澄清和/或更正的一些观点,希望得到回应。
-
在下面的代码中,在函数Insert_in_Cqueue()的最后,有一个语句'rear++; Cqueue[后] = ele;' , rear++是不是表示我们是从后往前移动的,因为这就是我们插入循环队列的方式?
- 在函数 Del_from_Cqueue() 的最后,有一个语句“front++”,这意味着通过增加“front”,我们只是失去了在特定运行中相关元素的跟踪函数del_from_cqueue(),本质上暗示我们已经删除了我们想要删除的元素?
代码:
#include<iostream>
#include<conio.h>
#include<process.h>
using namespace std;
int Insert_in_CQueue(int[], int);
void Display(int[], int, int);
int Del_from_CQueue(int CQueue[]);
void main()
{
const int size = 7;
int CQueue[size];
int Item, res, ch, front = -1, rear = -1;
do
{
cout << "\t\t\t Circular Queue Menu\n";
cout << "\t 1. Insert\n";
cout << "\t 2. Delete\n";
cout << "\t 3. Display\n";
cout << "\t 4. Exit\n";
cout << "\n Enter your choice(1-4)";
cin >> ch;
switch (ch)
{
case 1: cout << "\t\t You have selected the option to 'Insert' in the Queue. ";
cout << "\n Enter item for insertion ";
cin >> Item;
res = Insert_in_CQueue(CQueue, Item);
if (res == -1)
{
cout << "\n Overflow encountered";
}
else
{
cout << "\n Now the circular Queue is : ";
Display(CQueue, front, rear);
}
break;
case 2: Item = Del_from_CQueue(CQueue);
cout << "\n Element deleted is : " << Item << endl;
Display(CQueue, front, rear);
break;
case 3: Display(CQueue, front, rear);
break;
case 4: break;
default: cout << "\n Valid choices are 1,2,3,4 only ";
break;
}
} while (ch != 4);
_getch();
return;
}
int Insert_in_CQueue(int CQueue[], int ele)
{
int front = -1, rear = -1;
const int size = 7;
if ((front == 0 && rear == (size - 1)) || (front == rear + 1)) //the
second condition, as it is a circular queue, no end
{
return -1;
}
else if (rear == -1)
{
front = rear = 0;
}
else if (rear == size - 1)
{
rear = 0;
}
else
rear++;
CQueue[rear] = ele;
return 0;
}
void Display(int CQueue[], int front, int rear)
{
int i = 0;
const int size = 50;
cout << "\n Circular Queue is : \n" << "(Front shown as >>>, Rear as <<<
AND Free space as->\n";
if (front == -1)
return;
if (rear >= front)
{
for (i = 0; i < front; i++) cout << "-";
cout << ">>>";
for (i = 0; i < rear; i++) cout << CQueue[i] << "<---";
cout << CQueue[rear] << "<<<" << endl;
}
else
{
for (i = 0; i < rear; i++) cout << CQueue[i] << "<---";
cout << CQueue[rear] << "<<<";
for (i = 0; i < front; i++) cout << "-";
cout << ">>>";
for (i = front; i < size; i++) cout << CQueue[i] << "<---";
}
}
int Del_from_CQueue(int CQueue[])
{
int ret;
int front = -1, rear = -1;
const int size = 50;
if (front == -1) return -1;
else
{
ret = CQueue[front];
if (front == rear) front = rear = -1;
else if (front == size - 1)
front=0;
else front++;
}
return ret;
}
【问题讨论】:
标签: c++11 data-structures