头文件
#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 100
定义结构体
typedef int Elemtype;
typedef struct
{
int rear, front;
char date[MAXNUM];
}sqqueue;
初始化队列
void chushihua(sqqueue* q)
{
q->rear = q->front = 0;
}
入队
void rudui(sqqueue* q, Elemtype x)
{
if ((q->rear + 1) % MAXNUM == q->front)
printf("\n队列满!");
else
{
q->date[q->rear] = x;
q->rear = (q->rear + 1) % MAXNUM;
}
}
出队
void chudui(sqqueue* q)
{
Elemtype x;
if (q->rear == q->front)
printf("\n队列空!\n");
else
{
x = q->date[q->front];
q->front = (q->front + 1) % MAXNUM;
printf("\n出队的元素的值为:%d\n", x);
}
}
输出队列元素
void print(sqqueue* q)
{
if (q->rear == q->front)
printf("\n队列空!");
else
{
printf("\n队列中的元素为:\n");
for (int i = q->front ;i <= q->rear-1;i++)
printf("%d\t", q->date[i]);
}
}
我之前写的是
printf("\n队列中的元素为:\n");
while (q->front != q->rear)
{
q->rear = (q->rear- 1) % MAXNUM;
printf("\t\t%d", q->date[q->rear]);
}
第一个,q->date[q->rear] = x;q->rear = (q->rear + 1) % MAXNUM;,也就是你先让q->data[0]=x,然后尾指针再往后移,此时q->rear=1了接着,后面print队列的时候,你是先让尾指针往前移了,此时尾指针又变成0了,然后你就输出了,输出是没错,但是尾指针是0了,你下次再进队的时候,就是q->data[0]=x了,相当于把原来的1覆盖了。你之后每一次的进队都是覆盖第一个date,队列一直就只有一个元素了
求队列的长度
void changdu(sqqueue* q)
{
int x;
x = (q->rear - q->front + MAXNUM) % MAXNUM;
printf("\n队列的长度为:%d\n", x);
}
置空队列
void zhikong(sqqueue* q)
{
q->rear = q->front = 0;
}
求队首元素
void top(sqqueue* q)
{
int i,x;
i = q->rear;
x = q->date[i-1];
printf("\n队尾元素为:%d\n", x);
x = q->date[q->front];
printf("\n队首元素为:%d\n", x);
}
主函数
int main()
{
sqqueue* q;
q = (sqqueue*)malloc(sizeof(sqqueue));
Elemtype select, e;
chushihua(q);
select = 0;
do
{
printf("\n\n\t\t循环顺序队列的基本操作\n\n");
printf("\t\t请选择需要进行的操作\n\n");
printf("\t\t1.入队\n\n");
printf("\t\t2.出队\n\n");
printf("\t\t3.置空\n\n");
printf("\t\t4.队列的长度\n\n");
printf("\t\t5.队列两端元素值\n\n");
printf("\t\t6.退出操作\n\n");
scanf_s("%d", &select);
switch (select)
{
case 1:
printf("\n请输入需入队的元素的值。\n");
scanf_s("%d", &e);
rudui(q, e);
print(q);
break;
case 2:
chudui(q);
print(q);
break;
case 3:
zhikong(q);
print(q);
break;
case 4:
changdu(q);
break;
case 5:
top(q);
break;
case 6:break;
}
} while (select < 6);
}
运行结果