| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1140 人关注过本帖
标题: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
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
一个 unsigned short[100000] 用当队列
一个 unsigned [1001] 用于保存每个数值的数目
2020-11-29 18:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册: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
快速回复:c语言队列问题
数据加载中...
 
   



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

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