重拾算法Day05-队列

解密QQ

小哼问小哈QQ,小哈说了一串加密数字"6 3 1 7 5 8 9 2 4", 解密规则是:丢到第一个数字,将第二个放在其他数字后面;丢到第三个数字,将第四个放在其他数字后面;如此依次循环,QQ号是丢掉数字的排列("6 1 5 9 4 7 2 8 3")。
数组写法

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    int q[102]={0, 6, 3, 1, 7, 5, 8, 9, 2 ,4}, head,tail;
    head = 1;
    tail = 10;
    
    while (head < tail) {
        // 输出,即丢弃
        printf("%d ", q[head]);
        head ++;    //指向最新头部
        
        // 排到最后
        q[tail] = q[head];
        tail ++;    //指向最新尾部
        
        head ++;    //指向最新头部
    }

    return 0;
}

结构体写法

#include <stdio.h>

struct queue
{
    int data[100];  //队列主体,用来存储内容
    int head;   //队首
    int tail;   //队尾
};

int main(int argc, const char * argv[]) {
    
    struct queue q;
    q.head = 1;
    q.tail = 1;
    for (int i=1; i<=9; i++) {
        scanf("%d", &q.data[q.tail]);
        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 ++;
    }
    
    return 0;
}

队列总结

队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作(出队),而在队列的尾部进行插入操作(入队)。队列的特性:"先进先出"。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问 QQ 号,小哈当然不会直接告诉小哼啦,原因...
    极客学院Wiki阅读 878评论 1 9
  • 新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问 QQ 号,小哈当然不会直接告诉小哼啦,原因...
    青葱烈马阅读 491评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,926评论 25 709
  • 本文涉及更多的是概念,代码部分请参考之前写过的 2 篇博客 基于Javascript的排序算法基本数据结构和查找算...
    faremax阅读 1,324评论 0 2
  • 这个世界优秀的人挺多的,做好自己,永不言弃,总有一天会成为你想要的样子。
    Leilani_af1a阅读 190评论 0 0