zoukankan      html  css  js  c++  java
  • 浅谈队列

    《啊哈,算法》的第2章-----队列

    这一章通过一个qq号解密的例子引出了队列,并通过代码实现了解密过程。本文主要讲解qq号这个例子并用c语言实现

    关于队列的讲解可以查看博客:https://blog.csdn.net/zhongguozhichuang/article/details/53196415

    ------------------------------------------------------------------------------------------------------------------------

    问题描述:现在给一串数字,例如6 3 1 7 5 8 9 2 4,按照以下规则转换得到相应的序列,并输出

    具体规则为:首先将第1 个数删除,紧接着将第2 个数放到这串数的末尾,再将第3 个数删除并将第4 个数放到这串数的末尾,再将第5 个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起,输出就是转换后的序列。

    以上述为例:刚开始这串数是“6 3 1 7 5 8 9 2 4”,首先删除6 并将3 放到这串数的末尾,这串数更新为“1 7 5 8 9 2 4 3”。接下来删除1 并将7 放到末尾,即更新为“5 8 9 2 4 3 7”。再删除5 并将8 放到末尾即“9 2 4 3 7 8”,删除9 并将2 放到末尾即“4 3 7 8 2”,删除4 并将3 放到末尾即“7 8 2 3”,删除7 并将8 放到末尾即“2 3 8”,删除2 并将3 放到末尾即“8 3”,删除8 并将3 放到末尾即“3”,最后删除3。因此被删除的顺序是“6 1 5 9 4 7 2 8 3”

    在不使用队列的时 具体代码如下:

    #include<stdio.h>
    #define N 101
    
    /*
    * brief:解密qq号
    * example:
    *  input: 6 3 1 7 5 8 9 2 4
    * output:6 1 5 9 4 7 2 8 3
    */ int main() { int qq[N]={0}; int head,tail,i=1,len=0; printf("请输入您的qq号:"); do { scanf("%d",&qq[i++]); len++; }while(getchar()!=' '); head = 1; // 指向队头 即 第一个元素 tail = len+1; // 指向队尾的下一个元素 while(head < tail) { // 第一个元素删除 即 出队 printf("%d ",qq[head]); head ++; // 队头右移 qq[tail++] = qq[head]; // 将head指向的元素放在队尾 并且使tail向后移动一位 head ++; // 队头再次右移一位 , 完成一次循环操作 } return 0; }

    上面的这个例子根据队列的思想借用静态数组模拟进队出队操作,以下再看看采用结构体--队列,实现的代码吧

    #include<stdio.h>
    #define N 101
    
    // 采用队列解密
    
    typedef struct queue{
        int data[N];
        int head;
        int tail;
    }Queue;
    
    int main()
    {
        Queue q;
        int i;
        // 初始化队列
        q.head = 1;
        q.tail = 1;
        
        for(i=1;i<10;++i)
        {
            // 依此向队列中插入9个数
            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;
    } 

    当然。,队列不仅仅可以采用数组存储也可以采用链表(数据结构这本书里有详细的介绍,可以查阅相关书籍)。本文仅仅是为了学习队列写的上述代码,难免显的没第一个简洁。以后在做相关练习时,适合自己的风格就行,哪好用用哪个。有什么疑问,欢迎拍砖

  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/guohaoblog/p/9216024.html
Copyright © 2011-2022 走看看