标题:c语言队列问题
只看楼主
xiaohuo66
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2020-11-1
结帖率:88.89%
已结贴  问题点数:20 回复次数:2 
c语言队列问题
我们都了解队列,现在要求在队列中添加一种功能,即输出队列中有多少种不同的元素。

Input
多组样例,处理到文件结尾

每组样例的第一行是一个正整数n,表示有n次操作,1 <= n <= 1e5

接下来n行,每行表示一个操作,格式如下:

1 :输出队列中有多少种不同的数字

2 x :从队尾插入元素x,其中1 <= x <= 1000

3:取出队首元素,出现3操作时,保证队列非空

Output
对于每个操作1,输出答案
Sample Input
6

1

2 1

2 3

1

3

1

Sample Output

0

2

1
搜索更多相关主题的帖子: 输出 c语言 操作 元素 队列 
2020-11-28 21:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
一个 unsigned short[100000] 用当队列
一个 unsigned [1001] 用于保存每个数值的数目
2020-11-29 18:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
程序代码:
#include <stdio.h>

int main( void )
{
    // 队列
    unsigned queue[100000];
    size_t queue_begin = 0;
    size_t queue_end = 0;
    // [0,1000]中每个数字的数量
    unsigned count[1001] = { 0 };
    // 有多少种不同的数字
    unsigned variety = 0;

    unsigned n;
    scanf( "%u", &n );
    while( n-- )
    {
        unsigned action;
        scanf( "%u", &action );
        switch( action )
        {
        case 1:
            printf( "%u\n", variety );
            break;
        case 2:
            {
            unsigned push;
            scanf( "%u", &push );
            queue[queue_end++] = push;
            if( count[push] == 0 )
                ++variety;
            ++count[push];
            }
            break;
        case 3:
            {
            unsigned pop = queue[queue_begin++];
            --count[pop];
            if( count[pop] == 0 )
                --variety;
            }
            break;
        }
    }
}
2020-11-30 08:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504049-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.588689 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved