队列简称队,是线性表的一种特殊形式,是一种应用很广泛的数据结构.对于它的所有插入在表的一端进行;所有删除在表的另一端进行.从一端进队,从另一端出队,既先进先出原则,称为先进先出表(First In First Out,简称FIFO)
设队q=(a1,a2,......,an)中,a1为允许删除的一端,称为头(front),用F表示;an为允许插入的一端,称为尾(rear),用R表示.
队列的基本算法: 插入,删除,读列头的值,判断队列是否为空
#define MAX 5
char p[MAX],qde();
int spos,rpos; /*spos相当于R,推入指针, rpos相当F,删除指针*/
void qen(char);
1.队列的插入
void qen(char q)
{
if(spos==MAX)
{
printf("队列满了/n");
return ;
}
p[spos]=q;
spos++;
}
2.队列的删除
char qde()
{
if(rpos==spos)
{
printf("No(more) character./n");
return NULL;
}
p[rpos]='0'; /*出列复原加此语句,出列不复原,去掉此语句
rpos++;
return p[rpos-1]; /*删除后立即上推,在此语句前加push()*/
}
3.读列头的值
char ptop()
{
return p[rpos];
}
4.判断队列是否为空
int sempty()
{
if(rpos==spos)
return 1; //为真是空
esle
return 0; //为假不是空
}
5.队列中的元素向前移1位的函数
void push()
{
register int t;
for(t=rpos;t<spos;++t)
p[t-1]=p[t]; /*向前移一位*/
p[spos-1]='0';
rpos--;
spos--;
}
4.队列的输出函数
void print()
{
register int t;
for(t=0;t<MAX;t++)
printf("%c",p[t]);
printf("/n");
}
(1)循环队列的插入函数
void qen(char q)
{
if(spos==MAX) /*spos=R,尾*/
{
if(spos!=rpos)
spos=0;
else
{
printf("List 满了/n");
return;
}
}
p[spos]=q;
spos++;
}
(2)循环队列的删除函数
char qde()
{
if(spos==rpos)
{
printf("List 满了/n");
return NULL;
}
p[rpos]='0';
rpos++;
return p[rpos-1];
}