** 队列是一个线性表,但他的插入只能在队尾进行,删除只能在对头
/我们要表示一个队列,我们可以设置队列的指针我们通过对头和对尾来访问这个队列
typedef int ElemType;
typedef struct SqQueue{
ElemType *base;
int front;
int seart;
}SqQueue;
在执行入队操作时如果是队头指针并没有指向第一元素当尾指针到达尾部时该队列里已经放不下元素了,这会造成队列假
满,所以用循环来入队所以判断是否满是我们可以:(s.seart + 1) % MAX == front;判断
在求队列长度时 (s.seart - s.fornt + MAX) % MAX; **
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
typedef int ElemType;
typedef struct SqQueue{
ElemType *base;
int front;
int seart;
}SqQueue;
//初始化
int InsiQueue(SqQueue &s)
{
s.base = (ElemType *)malloc(MAX * sizeof(ElemType));
if(!s.base)
{
return 0;
}
s.front = 0;
s.seart = s.front;
return 1;
}
//入队
int DeQueue(SqQueue &s,ElemType e)
{
if((s.seart + 1) % MAX == s.front)
{
printf("队列已满\n");
}
s.base[s.seart] = e;
s.seart = (s.seart + 1) % MAX;
return 1;
}
//出队
int EmQueue(SqQueue &s,ElemType &e)
{
if(s.front == s.seart)
{
printf("队列已空\n");
}
e = s.base[s.front];
s.front = (s.front + 1) % MAX;
return 1;
}
//求队列长度
int QueueLength(SqQueue s)
{
return (s.seart - s.front + MAX) % MAX;
}
int main()
{
SqQueue s;
int num,i;
ElemType e;
if(InsiQueue(s))
{
printf("初始化成功\n");
printf("请输入数量:");
scanf("%d",&num);
for(i = 1;i <= num;i ++)
{
scanf("%d",&e);
if(DeQueue(s,e))
{
printf("入队成功\n");
}
}
for(i = 1;i <= num;i ++)
{
if(EmQueue(s,e))
{
printf("%d出对成功\n",e);
}
}
}
else
{
printf("初始化失败\n");
}
}