- 猴子吃桃问题,猴子第一天摘了若干个桃,当即就吃了一半数量的桃,没吃过瘾,又多吃一个,第二天,在剩下的桃里有吃了一半数量的桃,没吃过瘾,又多吃了一个,依此类推,直到第10天,想吃桃的时候,发现只剩下一个桃了,问:猴子第一天摘了多少个桃。(递归完成)






#ifndef __SEQ_QUE__
#define __SEQ_QUE__
#include <stdio.h>
#include <stdlib.h>
#define MAX 8
typedef int datatype;
typedef struct
{
datatype data[MAX];
int front;
int rear;
}queue;
//1、创建循环队列
queue *create_p();
//2、判空
int empty_queue(queue *Q);
//3、盘满
int full_queue(queue *Q);
//4、入队
void push_queue(queue *Q,datatype data);
//5、出队
void pop_queue(queue *Q);
//6、销毁队列
void free_queue(queue **Q);
//7、输出
void show_que(queue *Q);
#endif
#include "seq_que.h"
int main()
{
queue *Q=create_p();
push_queue(Q,10);
push_queue(Q,20);
show_que(Q);
free_queue(&Q);
show_que(Q);
return 0;
}
#include "seq_que.h"
//1、创建循环队列
queue *create_p()
{
queue *Q=(queue*)malloc(sizeof(queue));
if(Q==NULL)
{
printf("空间申请失败\n");
return NULL;
}
Q->front =0;
Q->rear = 0;
return Q;
}
//2、判空
int empty_queue(queue *Q)
{
if(Q==NULL)
{
printf("入参有误\n");
return -1;
}
return Q->rear%MAX==Q->front? 1:0;
}
//3、判满
int full_queue(queue *Q)
{
if(Q==NULL)
{
printf("入参有误\n");
return -1;
}
return (Q->rear+1)%MAX==Q->front%MAX ?1:0;
}
//4、入队
void push_queue(queue *Q,datatype data)
{
if(Q==NULL)
{
printf("入参有误\n");
return ;
}
if(full_queue(Q))
{
printf("队列已满,无法入队\n");
return;
}
Q->data[Q->rear]=data;
Q->rear=(Q->rear+1)%MAX;
}
//5、出队
void pop_queue(queue *Q)
{
if(Q==NULL)
{
printf("入参有误\n");
return ;
}
if(empty_queue(Q))
{
printf("队列已空,无需出队\n");
return;
}
Q->front=(Q->front+1)%MAX;
}
//6、销毁队列
void free_queue(queue **Q)
{
if(*Q==NULL)
{
printf("入参有误\n");
return ;
}
free(*Q);
*Q=NULL;
}
//7、输出
void show_que(queue *Q)
{
if(Q==NULL)
{
printf("入参有误\n");
return ;
}
if(empty_queue(Q))
{
printf("队列已空\n");
return;
}
int i=Q->front;
printf("**队列前排****\n");
while(i!=Q->rear)
{
printf("%d\n",Q->data[i]);
i=(i+1)%MAX;
}
printf("**********\n\n");
}

被折叠的 条评论
为什么被折叠?



