重拾算法Day05-队列

2016-11-05  本文已影响12人  面试小集

解密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)进行删除操作(出队),而在队列的尾部进行插入操作(入队)。队列的特性:"先进先出"。

上一篇 下一篇

猜你喜欢

热点阅读