标签:先进先出 printf class log 依次 main while com i++
小明和小丽同在一个自习室上自习,小明感觉小丽是一个很不错的女孩,于是他鼓足勇气向小丽要QQ号,然而小丽也是个矜持的女孩,当然不会直接告诉他,所以小丽给了小明一串加密过的数字,同时她也告诉小明解密规则:首先将第一个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数放到这串数的末尾,以此类推...直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小丽的QQ号了。加密过的一串数字为“6 3 1 7 5 8 9 2 4”.
注:如果用9张小纸片,将9个数字分别写在9张纸片上,模拟一下解密过程,正确的结果应该是“6 1 5 9 4 7 2 8 3”。
当然了,如果这么快就结束了这个问题,那还写这个有什么意思呢,下面我们用代码来实现它。
int q[102]={0,6,3,1,7,5,8,9,2,4},head,tail; /*初始化队列*/ head=1; tail=10; //队列中已经有9个元素了,tail指向队尾的后一个位置 while(head<tail) //当队列不为空的时候执行循环 { printf("%d ",q[head]); //打印队首并将队首出队 head++; q[tail]=q[head]; //先将新队首的数添加到队尾 tail++; head++; //再将队首出队 } return 0;
现在我们将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型,如下:
struct queue{ int data[100]; //队列的主体 int head; //队首 int tail; //队尾 };
下面我们就使用结构体来实现队列的操作:
#include<stdio.h> struct queue{ int data[100]; //队列的主体 int head; //队首 int tail; //队尾 }; int main() { struct queue q; int i; /*初始化队列*/ q.head=1; q.tail=1; for(i=1;i<=9;i++) { scanf("%d ",&q.data[q.tail]); //依次向队列插入9个数 q.tail++; } while(q.head<q.tail)//当队列不为空的时候 执行循环 { printf("%d ",&q.data[q.head]); //打印队首并将队首出队 q.head++; q.data[q.tail]=q.data[q.head]; //先将新队首的数添加到队尾 q.tail++; q.head++; //再将队首出队 } getchar();getchar(); return 0; }
生活中处处都有队列的例子,透过现象看本质,往往还会有意外的收获。而且学好队列,还有助于把妹子,向美好的幸福生活前进一步。嗯,说了这么多,我也该好好学习下队列了,以防哪天向妹子要QQ或手机号时也会遇到这样的问题...
希望问题设计中的小明已经成功解密了小丽的QQ号,然后幸福的在一起了~~~
标签:先进先出 printf class log 依次 main while com i++
原文地址:http://www.cnblogs.com/OctoptusLian/p/6664560.html