69,336
社区成员
发帖
与我相关
我的任务
分享
/*实现循环队列的基本运算*/
/*实现顺序列的基本运算*/
#include <stdio.h>
#define maxsize 20
/*对队列数据类型的说明*/
typedef int elemtype;
typedef struct
{
elemtype queue[maxsize];
int front; //定义头指针
int rear; //定义尾指针
}Sequeue;
Sequeue s;
/*初始化队列*/
Sequeue Iniqueue ()
{
s.front = s.rear = -1; //空对就是头指针等于尾指针
return s;
}
/*进队运算*/
Sequeue enqueue (Sequeue &s, elemtype x)
{
/*就是将数据x插入到队尾,注意队列满了的情况*/
if ((s.rear+1)%maxsize == s.front)
printf("队列满了!\n");
else
{
s.rear = (s.rear+1)%maxsize; //先使为指针后移一个位置
s.queue[s.rear] = x; //将x赋给新的队尾元素
}
return s;
}
/*出队运算*/
void dlqueue (Sequeue &s)
{
/*删除对首元素,注意队列为空的情况*/
//********************************************************
if (s.front == s.rear)// 判断是否相等“==”写成了“=”
//*********************************************************
{
printf("空队列!\n"); //判断队列是否为空
}
else
{
s.front = (s.front+1)%maxsize; //使头指针后移一个位置
}
}
/*取队首元素*/
elemtype gethead (Sequeue &s)
{
/*仍然要注意队列为空的情况*/
if (s.front = s.rear)
{
printf("空队列!\n"); //判断队列是否为空
}
else
{
return s.queue[(s.front+1)%maxsize];
}
}
/*遍历队列函数,从对头到队尾依次输出队列元素*/
void display (Sequeue &s)
{
int i;
/*注意队列为空的情况*/
if (s.front = s.rear)
{
printf("空队列!\n"); //判断队列是否为空
}
else
{
printf("队列遍历(对头->队尾):\n");
for (i = s.front; s.rear != i%maxsize; i=(i+1)%maxsize)
{
printf("%d->", s.queue[i]);
}
printf("\b\b\n");
}
}
int main ()
{
//Sequeue s; //定义一个循环队列
int i;
s = Iniqueue (); //调用初始化队列函数
for (i=1;i<=15;i++)
{
s = enqueue (s, i);
}
/*元素进队后遍历队列*/
display (s);
return 0;
}