#include<stdio.h>
#include<stdlib.h>
#define Maxsize 100
/* 向计算机专业的同学要电话号码,他(她)不会直接给你的,原因你懂的。他(她)会告诉你一串加密过的数字,同时告诉你解密的规则。规则是这样的:首先将第1个数字删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数放到这串数的末尾…,直到剩下最后一个数,把这个数也删除。按删除的顺序将删除的数连在一起,就是电话号码了。
/
//定义一个队结构体
/
先入队把所有元素入队 队头出队,新的队头往后移一下然后再出队队尾增加,队头删除
*/
typedef struct Queue
{
int queue[Maxsize];
int front,rear;
}queue;
//创建队
void inQueue(queue *q)
{
//队头尾都初始化为空
q->queue==NULL;
q->front=0;
q->rear=0;
}
//入队
int addQueue(queue *q,int x)
{
//如果队尾加1模去最大长度等于队头
if((q->rear+1)%Maxsize==q->front)
return 0;
q->rear=(q->rear+1)%Maxsize;
q->queue[q->rear]=x;
return 1;
}
//出队
int outQueue(queue *q)
{
if(q->front == q->rear)
return NULL ;
q->front =( q->front+ 1) % Maxsize ;
return q->queue[q->front] ;
}
//判断队是否为空
int isempty(queue *q)
{
if(q->front == q->rear)
return 1 ;
return 0 ;
}
/*读取队头元素
int getQueue(queue *q)
{
if(q->front== q->rear )
return NULL ;
return q->queue[(q->front+1) % Maxsize] ;
}
*/
//写一个方法解密
int DecQueue(queue *q,queue *p)
{
//头尾有了
if((NULLq)&&(NULLp))
{
return 0;
}
int i=0;
while(q->frontrear)
{
printf(“头%d\n”,q->front);
printf(“尾%d\n”,q->rear);
printf(“头%d\n”,p->front);
printf(“尾%d\n”,p->rear);
char temp=outQueue(q);
printf("头%d\n",q->front);
printf("头%c\n",q->queue[q->front]);
printf("第%d个元素%c\n",i,temp);
addQueue(p,temp);
printf("添加元素进去\n");
printf("%c",q->queue[q->rear-1]);
for(int i=0;i<q->rear;i++)
{
q->rear=0;
i++;
}
q->queue[q->rear]
q->queue[q->rear]=q->queue[q->front];
//把第一个值给新的队
//覆盖掉队
}
}
//main
int main()
{
//传参数
struct Queue *q,*p;
q=(struct Queue *)malloc(sizeof(struct Queue)) ;
p=(struct Queue *)malloc(sizeof(struct Queue)) ; //分配空间
char ch;
inQueue(q);
inQueue§;
printf(“请输入你的数字\n”);
ch=getchar();
//当#号结束
while(ch!=’#’)
{
addQueue(q,ch);
printf(“入队%c\n”,ch);
//printf(“下一个数\n”);
ch=getchar();
}
DecQueue(q,p);
while(!isempty§){
int temp=outQueue§;
printf(“解密%c”,temp);
}
return 0;
}