#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int front = 0;
int rear = 0;
/*<2>判断队列空操作******************************/
int IsEmpty()
{
if (rear == front)
{
printf("\n队列空!");
return 1;
}
else
{
printf("\n队列非空!");
return 0;
}
}
/* 判断队列满操作**********************************/
int IsFull()
{
if ((rear + 1) % 6 == front)
{
printf("\n队列满!");
return 1;
}
else
{
printf("\n队列没有满!");
return 0;
}
}
/* 入队列操作**********************************/
EnQueue(int q[])
{
int e, i;
if (IsFull())
{
printf("\n队列满!不能进行入队列操作!");
}
else
{
printf("\n请输入一个入队列元素: ");
scanf("%d", &e);
q[rear] = e;
rear = (rear + 1) % 6;
}
printf("\n队列的结构为: ");
for (i = 0; i <= 5; i++)
{
printf("%d ", q[i]);
}
}
/* 出队列操作**********************************/
DeQueue(int q[])
{
int i;
if (IsEmpty())
{
printf("\n队列空!不能进行出队列操作!");
}
else
{
printf("\n出队列元素%d", q[front]);
q[front] = 0;
front = (front + 1) % 6;
}
printf("\n队列的结构为: ");
for (i = 0; i <= 5; i++)
{
printf("%d ", q[i]);
}
}
/* 长度操作**********************************/
void Length(int q[])
{
printf("\n元素个数为:%d ", abs(rear - front + 6) % 6);
}
//***主函数**************************************
main()
{
int choice;
int q[6] = { 0 };
while (1)
{
printf("\n++++++++++++++++++++++\n");
printf("1:EXIT 2:IsEmpty 3:IsFull 4:EnQueue 5:DeQueue 6:Length");
printf("\n++++++++++++++++++++++\n");
printf("choice:"); scanf("%d", &choice);
if (choice == 1)break;
if (choice == 2)IsEmpty();
if (choice == 3)IsFull();
if (choice == 4)EnQueue(q);
if (choice == 5)DeQueue(q);
if (choice == 6)Length(q);
}
}
关于栈的重要代码含义:
front==rear //判断队列空
front==(rear+1)%M //判断队列满
rear==(rear+1)%M //入队列
front==(front+1)%M //出队列
abs(raar-front+M)%M //|raar-front+M|%M 循环队列元素个数
关于函数:
这段代码是用C语言编写的,实现了一个简单的队列数据结构。函数声明中是否包含参数取决于函数是否需要接受参数。让我来解释一下:
1. int IsEmpty(): 这个函数不需要接受任何参数。它用于检查队列是否为空。因为它不需要外部数据(如队列本身),所以括号内没有参数。
2. int IsFull(): 与 IsEmpty() 类似,这个函数也不需要接受参数,因为它检查队列是否已满,这可以通过函数内部的 `front` 和 `rear` 的值来确定。
3. EnQueue(int q[]): 这个函数接受一个整数数组 q[] 作为参数,表示队列。它用于向队列添加一个元素,需要访问队列数组才能执行这个操作。
4. DeQueue(int q[]): 与 `EnQueue()` 类似,这个函数也接受队列数组 q[] 作为参数,因为它从队列中移除一个元素,需要修改队列本身。
5. void Length(int q[]): 这个函数同样接受队列数组 q[] 作为参数。它用于计算并打印队列中的元素个数,这需要访问队列数组。
总之,EnQueue() 和 DeQueue() 等函数需要访问队列数据结构,所以它们将队列数组 q[] 作为参数。而 IsEmpty() 和 IsFull() 等函数不需要访问队列数组,因此括号内没有参数。
关于void:
在函数声明中,返回类型指定了函数将返回的数据类型。void 是一种特殊的返回类型,它表示函数不返回任何值。在这种情况下,void 表示 Length 函数不返回任何数据,它只执行某些操作而不产生结果。函数名之前的 void 告诉编译器和其他开发人员,这个函数不会返回任何值,因此不需要使用 return 语句来返回结果。
在 Length 函数中,它计算队列中的元素个数并通过 printf 打印结果,但它并不返回这个结果作为函数值。因此,它的返回类型被声明为 void,以指示它没有返回值。如果不需要从函数中获取任何值,通常将返回类型设置为 void,以明确表明这一点。