这个并没有错,可以根据图分开来算
创新互联公司是专业的海北州网站建设公司,海北州接单;提供成都做网站、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行海北州网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
front指针指向存储元素位置,rear指针指向第一个未存储元素位置
首先,队列上半部分,有元素,m-30+1;
其次,队列下半部分,有元素,10-1;
所以,总共的元素个数为total = m-30+1+10-1 = m-20
#includestdio.h
#includemalloc.h
struct link_cqueue
{
int data;
struct link_cqueue *next;
};
//初始化循环链队列
struct link_cqueue *init_link_cqueue()
{
struct link_cqueue *rear;
rear=NULL; /*队尾指针设置为空*/
return rear;
}
//(1)插入(即入队)算法:
struct link_cqueue *EnCQueue(struct link_cqueue *rear, int x)
{ //设循环链队列的队尾指针为rear,x为待插入的元素
struct link_cqueue *p;
p=(struct link_cqueue *)malloc(sizeof(struct link_cqueue));
p-data=x;
if(rear==NULL) //如为空队,建立循环链队列的第一个结点
{
rear=p;
rear-next=p; //链接成循环链表
}
else //否则在队尾插入p结点
{
p-next=rear-next;
rear-next=p;
rear=p;
}
return rear;
}
//(2)删除(即出队)算法:
struct link_cqueue *DeCQueue(struct link_cqueue *rear)
{ //设循环链队列的队尾指针为rear
if (rear==NULL) //空队
printf("队列为空无法删除!\n");
else if(rear-next==rear) //队中只有一个结点
rear=NULL;
else
rear-next=rear-next-next; //rear-next指向的结点为循环链队列的队头结点
return rear;
}
//循环队列的输出
void print_link_cqueue(struct link_cqueue *rear)
{
struct link_cqueue *p;
if(!rear)
printf("队列为空!\n");
else
{
printf("%5d",rear-next-data);
p=rear-next;
while(p!=rear)
{
printf("%5d",p-next-data);
p=p-next;
}
}
printf("\n");
}
main()
{
struct link_cqueue *rear;
int x;
int c;
rear=init_link_cqueue();
do
{
printf("请选择入队或出队操作:1:入队;2:出队;3:输出!\n");
scanf("%d",c);
if(c==1)
{
printf("请输入要入队的元素:");
scanf("%d",x);
rear=EnCQueue(rear,x);
}
else if(c==2)
{
rear=DeCQueue(rear);
}
else if(c==3)
print_link_cqueue(rear);
else
printf("选择错误,请重新选择");
}while(1);
}
q.push(m); // queue是C++STL模板库的东西,需要使用push来插入元素,详细信息你可以参考MSDN来了解其使用及内容。