首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

去掉重复的数字并使用堆栈打印(C程序)

去掉重复的数字并使用堆栈打印是一个常见的编程问题,可以通过使用堆栈数据结构来解决。下面是一个C程序的示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

#define STACK_SIZE 100

typedef struct {
    int data[STACK_SIZE];
    int top;
} Stack;

void initStack(Stack* stack) {
    stack->top = -1;
}

bool isStackEmpty(Stack* stack) {
    return stack->top == -1;
}

bool isStackFull(Stack* stack) {
    return stack->top == STACK_SIZE - 1;
}

void push(Stack* stack, int value) {
    if (isStackFull(stack)) {
        printf("Stack is full. Cannot push element.\n");
        return;
    }
    stack->data[++stack->top] = value;
}

int pop(Stack* stack) {
    if (isStackEmpty(stack)) {
        printf("Stack is empty. Cannot pop element.\n");
        return -1;
    }
    return stack->data[stack->top--];
}

void removeDuplicatesAndPrint(int* nums, int size) {
    Stack stack;
    initStack(&stack);

    for (int i = 0; i < size; i++) {
        if (isStackEmpty(&stack) || nums[i] != stack.data[stack.top]) {
            push(&stack, nums[i]);
        }
    }

    printf("Result: ");
    while (!isStackEmpty(&stack)) {
        printf("%d ", pop(&stack));
    }
    printf("\n");
}

int main() {
    int nums[] = {1, 2, 2, 3, 4, 4, 5};
    int size = sizeof(nums) / sizeof(nums[0]);

    removeDuplicatesAndPrint(nums, size);

    return 0;
}

这段代码实现了去除重复数字并使用堆栈打印的功能。它使用了一个自定义的堆栈数据结构,并定义了一些常用的堆栈操作函数。在removeDuplicatesAndPrint函数中,遍历输入数组,如果堆栈为空或当前数字不等于堆栈顶部的数字,则将当前数字压入堆栈。最后,依次弹出堆栈中的元素并打印出来,即可得到去重后的结果。

这个问题的应用场景可以是需要对一组数字进行去重操作,并按照特定顺序输出结果的场景。例如,对于一个用户输入的数字序列,我们可以使用这个算法去除重复数字,并按照用户输入的顺序打印出来。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能平台(AI Lab):https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台(IoT Hub):https://cloud.tencent.com/product/iothub
  • 腾讯云移动开发平台(MTP):https://cloud.tencent.com/product/mtp
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙平台(Tencent Real-Time Rendering (TRTR)):https://cloud.tencent.com/product/trtr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一种C程序使用IPC多进程共享内存实现热迁移方法

CRIU 是用于 Linux 操作系统软件工具。使用此工具,可以冻结正在运行应用程序,并将其作为文件集合检查点到持久性存储中。然后,人们可以使用这些文件从冻结点还原运行应用程序。...但不是所有程序都支持通过CRIU进行热迁移,例如使用了 SYS V C程序就不可以使用 CRIU 进行 进程热迁移。...这篇文章讨论如何使用CRIU迁移使用了共享内存程序,主要讨论其中前两种共享内存方法,最终介绍一种支持热迁移C程序共享内存使用方法。...进程热迁移 上文简单提到了 criu 工具,本文目标即迁移使用了共享内存C程序,实测使用了 Sys V 共享内存C程序无法迁移,报错如下: Task 4526 with SysVIPC shmem.../migrate_imgs/ -j 使用该方法可以将使用了共享内存C程序冻结,之后恢复进程状态,Posix 共享内存API略有不同,但使用方法类似,至于更进一步探索,还需继续努力。

1.3K20

C语言】函数系统化精讲(三)

; 但是这⾥有个问题就是得到数字顺序是倒着 但是我们有了灵感,我们发现其实⼀个数字最低位是最容易得到,通过%10就能得到 那我们假设想写⼀个函数Print来打印n每⼀位,如下表⽰:...,递归调用Print函数,每次都打印出当前数字最后一位,然后将问题规模减小,直到数字变成0为止。...什么是运行时开销呢? 在C语言中,每次函数调用都需要在栈区为本次函数调用申请一块内存空间,用来保存函数调用期间各种局部变量值。这块空间被称为运行时堆栈,或者函数栈帧。...直接CPU干起来,博主电脑无法立刻截不了图,所以导致截图不到想要高CPU运行百分比,推荐你们也可以尝试一下) 其实递归程序会不断展开,在展开过程中,我们很容易就能发现,在递归过程中会有重复计算...这里我们发现,在计算第40个斐波那契数时,使用递归方式会导致第3个斐波那契数被重复计算了39088169次,这些计算是非常冗余

8210
  • C语言】递归详解

    0; } 上述就是⼀个简单递归程序,只不过上⾯递归只是为了演示递归基本形式,不是为了解决问题,代码最终也会陷⼊死递归,导致栈溢出。...,我们就是使用了大事化小思路 把Print(1234) 打印1234每一位,拆解为首先Print(123)打印123每⼀位,再打印得到4 把Print(123) 打印123每一位,拆解为首先Print...在C语言中每一次函数调用,都要需要为本次函数调用在栈区申请⼀块内存空间来保存函数调用期间各种局部变量值,这块空间被称为运行时堆栈,或者函数栈帧。...所以如果不想使用递归就得想其他办法,通常就是迭代方法(通常就是循环方法)。 比如:计算n阶乘,也是可以产生1~n数字累计乘在⼀起。...当n大于2时就要实现前面两个数字,就要相加,然后将a和b都向后挪,也就是将b值给a,c值给b,然后再执行a+b,每执行一次n都要减减一下。

    71610

    阶段01Java基础day17集合框架03

    17.04_集合框架(HashSet如何保证元素唯一性原理) 1.HashSet原理 我们使用Set集合都是需要去掉重复元素, 如果在存储时候逐个equals()比较, 效率较低,哈希算法提高了去重复效率...集合框架(产生10个1-20之间随机数要求随机数不能重复) A:案例演示 需求:编写一个程序,获取10个1至20随机数,要求随机数不能重复。...} 17.07_集合框架(练习) 使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同那些字符 aaaabbbcccddd Scanner sc = new Scanner...list中 } 17.17_集合框架(练习) 从键盘接收一个字符串, 程序对其中所有字符进行排序,例如键盘输入: helloitcast程序打印:acehillostt Scanner...把所有输入整数倒序排列打印.

    54720

    Java基础笔记17

    17.04_集合框架(HashSet如何保证元素唯一性原理) 1.HashSet原理 我们使用Set集合都是需要去掉重复元素, 如果在存储时候逐个equals()比较, 效率较低,哈希算法提高了去重复效率...集合框架(产生10个1-20之间随机数要求随机数不能重复) A:案例演示 需求:编写一个程序,获取10个1至20随机数,要求随机数不能重复。...} 17.07_集合框架(练习) 使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同那些字符 aaaabbbcccddd Scanner sc = new Scanner...list中 } 17.17_集合框架(练习) 从键盘接收一个字符串, 程序对其中所有字符进行排序,例如键盘输入: helloitcast程序打印:acehillostt Scanner...把所有输入整数倒序排列打印.

    67360

    python 面试题-收集100+面试题笔试题

    1.24 输入一个正整数,判断是几位数 题目 给一个不多于5位正整数,要求: 一、求它是几位数, 二、逆序打印出各位数字。...第5章 综合练习题(上机考试) 5.1 有1、2、3、4组成无重复三位数(排列组合) 有1、2、3、4数字能组成多少互不相同无重复三位数?...分别使用map reduce filter 函数完成下面的任务 1.计算 1- 100 和 2.1-10,对每个数字平方 3....,从高到低排序,去除重复 比如2出现了4次,排第一个位置。...例如:“hello”就包含重复字符‘l’,而“world”就不包含重复字符, 有重复打印True, 没重复打印False 5.20 找出一个字符串中子串不含有重复字符最长子串(子串) 给定一个字符串,

    6.7K20

    嵩天老师-Python语言程序设计-Python123配套练习测验题目汇总整理

    参考链接: 程序打印自己名称作为输出 测验1:Python基本语法元素  知识点概要:  普遍认为Python语言诞生于1991年Python语言中缩进在程序中长度统一且强制使用,只要统一即可,不一定是...,模块间关系应尽可能简单,模块之间耦合度低,尽可能合理划分功能块,功能块内部耦合度高递归不会提高程序执行效率,任何递归程序都可以通过堆栈或队列变为非递归程序函数是一段具有特定功能、可重用语句组,可以看做是一段具有名字程序...    print(";".join(ls)) #元素间插入分号 f.close() #参考答案(使用strip()方法去掉每行最后回车,使用replace()去掉每行元素两侧空格) f = open...in s:     if c in alpha:         print(c, end="") 数字鲁棒输入:获得用户输入一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。...,将其他字符按收入顺序打印输出  print(input().replace(" ","")) 文件关键行数:关键行指一个文件中包含重复行。

    1.2K00

    第十八天 集合-泛型&list接口&set接口【面试+工作】

    在开发时,LinkedList集合也可以作为堆栈,队列结构使用。...super T :代表接收泛型类型为T类型或T父类类型 6.1.3 请编写程序,将3个学生信息存储到数组中,遍历数组,获取得到每一个学生信息 6.1.4 请编写程序,存储3个手机对象到ArrayList...,类中包括: 姓名 学号 年龄 6.1.9 熟练泛型使用方法,完成简单泛型类定义,使用。...1.定义一个存储数字集合,随意存储一些数据(要求这些数据中包含一些重复数字); 2.使用一种很方便方式将这个集合中重复数字去掉. package day08_Test拓展三道编程题; import...,随意存储一些数据(要求这些数据中包含一些重复数字); 2.使用一种很方便方式将这个集合中重复数字去掉. */ public static void main(String[] args

    76220

    嵩天老师-Python语言程序设计-Python123配套练习测验题目汇总整理

    +操作符用来连接两个字符串序列字符串是一个连续字符序列,使用\n可以实现打印字符信息换行val = pow(2,1000) #返回val结果长度值要使用 len(str(val)),因为整型没有len...,模块间关系应尽可能简单,模块之间耦合度低,尽可能合理划分功能块,功能块内部耦合度高递归不会提高程序执行效率,任何递归程序都可以通过堆栈或队列变为非递归程序函数是一段具有特定功能、可重用语句组,可以看做是一段具有名字程序...    print(";".join(ls)) #元素间插入分号 f.close() #参考答案(使用strip()方法去掉每行最后回车,使用replace()去掉每行元素两侧空格) f = open...in s:     if c in alpha:         print(c, end="") 数字鲁棒输入:获得用户输入一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。...,将其他字符按收入顺序打印输出  print(input().replace(" ","")) 文件关键行数:关键行指一个文件中包含重复行。

    2.7K40

    GDB使用详解

    *注意-g,在linux下用gcc编译时,如果不加-g,编译器会进行优化,就不会生成调试信息,无法调试,也可以使用-ggdb,这是gcc为gdb提供更详细调试信息,别的调试器无法使用。...,查看断点; 例:如下图,通过b设置断点,如果要为断点指定源文件,使用b helloworld.c:10(源文件名:行数或者函数名),列Num数字123是断点序号,Disp为keep表示为普通断点,...r (run):执行程序; s(step):有函数时,进入函数函数体,没有时,单步执行; n (next):单步执行,不进入函数体; c (continue):遇到断点以后,程序会阻塞,输入c可以让程序继续执行...until:可以运行程序直到退出循环体; finish:运行程序,直到当前函数完成返回,打印函数返回时堆栈地址和返回值及参数值等信息; watch:设置一个监视点,一旦被监视“表达式”值改变,gdb...将强行终止正在被调试程序; frame n:移动到指定栈帧,打印信息,n为帧编号,如果不指定n,打印当前栈信息; set args 参数:指定运行时参数; show args:查看设置好参数

    6.8K100

    【开发环境】Ubuntu 中使用 VSCode 开发 CC++ ⑤ ( tasks.json 中 args 数组配置分析 | 编译执行 C++ 程序 )

    文章目录 一、tasks.json 中 args 数组配置分析 二、编译执行 C++ 程序 可以参考官方提供文档 : https://code.visualstudio.com/docs/cpp/...config-linux 使用 VSCode 开发 C/C++ 程序 , 涉及到 3 个配置文件 : ① tasks.json : 编译器构建 配置文件 ; ② launch.json : 调试器设置...} 目录是 .vscode , {fileBasenameNoExtension} 是 task , 输出路径是 .vscode/task ; 二、编译执行 C++ 程序 ---- 使用 Ctrl +...生成可执行文件在 .vscode 目录下 , 名称是 task ; 执行 cd .vscode 命令 , 进入 .vscode 目录中 , 使用 ..../task 命令 , 执行该 task 可执行文件 , 打印如下内容 ; Hello C++ World from VS Code and the C++ extension!

    3K20

    编程实现删除数组中在重复数字

    参考链接: C++程序查找三个数字中最大数字 本人在学习潭浩强C++程度设计一书时,看到如下一道练习题:  编写程序,在被调函数中删去一维数组中所有 相同数,使之只剩一个,数组中数已按由 小到大顺序排列...,被调函数返回删除后数组 中数据个数。...例如: 原数组: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后: 2 3 4 5 6 7 8 9 10    本人解答如下,发上来与大家交流,不合理之处,还望大家不吝赐教...思路:  一、从数组后面开始,去掉所有重复;         PS:本人做法是将重复置为0。  二、将散乱分布非零元素整理到一起,同时统计数据个数;  三、打印数组,return 数据个数。

    1.1K20

    C语言基础】:函数递归详解

    递归实现需要深入思考问题分解和合并过程,对于初学者来说可能会有一定难度。 隐式堆栈:递归调用会创建隐式函数调用堆栈,其中保存了每个递归调用状态。...如果递归层数很深,堆栈可能会占用大量内存空间,从而增加程序内存消耗。 4. 函数递归两个必要条件 存在限制条件,当满足这个限制条件时候,递归便不再继续。...顺序打印整数每一位 题目需求:输入一个整数m,按照顺序打印整数每一位。...定义递归处理过程:递归步骤是将问题分解为计算nk-1次方,乘以n结果。 返回结果:将递归得到结果返回。...定义递归基:当输入整数n小于10时,即只有一位数时,直接返回该数字作为结果。 定义递归处理过程:通过递归调用函数,将问题分解为计算n最后一位数字和剩余数字之和结果。

    53910

    c语言从入门到实战——函数递归

    ; 但是这里有个问题就是得到数字顺序是倒着 但是我们有了灵感,我们发现其实一个数字最低位是最容易得到,通过%10就能得到 那我们假设想写一个函数Print来打印n每一位,如下表示:...在C语言中每一次函数调用,都要需要为本次函数调用在栈区申请一块内存空间来保存函数调用期间各种局部变量值,这块空间被称为运行时堆栈,或者函数栈帧。...所以如果不想使用递归就得想其他办法,通常就是迭代方式(通常就是循环方式)。 比如:计算n阶乘,也是可以产生1~n数字累计乘在一起。...其实递归程序会不断展开,在展开过程中,我们很容易就能发现,在递归过程中会有重复计算,而且递归层次越深,冗余计算就会越多。...,使用递归方式,第3个斐波那契数就被重复计算了 39088169次,这些计算是非常冗余

    16710

    格式化字符串一文入门到实战

    SQL攻击效果,这句代码将在堆栈打印接下来20个数据 攻击者甚至可以通过使用特殊情况格式说明符直接访问堆栈第i个参数: printf("%10$x"); 这句代码将在堆栈打印第十个元素 很明显...这意味着即使数据不在堆栈中,攻击者也有可能使用%s从任何地址读取。 但是,具体又如何控制%s访问地址?攻击者需要在堆栈上放置一个地址,使%s取消引用该地址!...不仅如此,攻击者甚至可以使用格式函数导致程序崩溃 由于%s函数参数是通过引用传递,因此对于格式字符串中每个%s,该函数将从堆栈中检索一个值,将该值视为地址,然后打印出存储在该地址字符串。...但是堆栈值并不总是一个地址。它们可以是整数,字符或任何其他类型数据。这意味着如果攻击者强制该函数将堆栈数据解释为一个地址,则该程序可能会遇到无效地址崩溃。...如果使用不当,看似无害格式函数可能会成为漏洞主要来源。除C之外,许多其他编程语言都有其自己格式函数,在使用它们输出数据之前,建议检查这些函数用法,特别注意可能安全隐患,避免漏洞发生。

    1.5K30

    搞懂JavaScript引擎运行原理

    myOtherVar = 10在全局上下文中,myOtherVar被赋值为10 已经创建了所有函数,下一步是执行函数 a() 每次调用函数时,都会为该函数创建一个新上下文(重复步骤1),并将其放入调用堆栈...myOtherVar,然后调用函数b 函数b 也会创建一个新上下文,同样也被放入堆栈中 5,函数b上下文中创建了 myVar 变量,声明函数c 上面提到每个新上下文会创建外部引用,外部引用取决于函数在代码中声明位置...由于函数b是全局声明,而不是在函数a内部声明,所以它使用全局变量myOtherVar。 函数c执行步骤一样。...,所以回调函数实际是两秒后才会执行,这是JavaScript应用程序常见错误。...它会立即被推到回调队列,但它仍然会等待调用堆栈为空才会执行。 用闭包来缓存 Memoization是缓存函数调用结果过程。 例如,有一个添加两个数字函数add。

    85820

    攻击本地主机漏洞(中)

    图10-9中所示以下易受攻击堆程序是用C编写,代表了https://www.owasp.orgwiki页面。程序将在溢出前后打印两个值内容:“buf0”和“buf1”。...下载overflow.c源代码,使用gcc编译源代码,禁用canary和DEP堆栈保护: # gcc overflow.c -o overflow -fno-stack-protector -z execstack...c代码联机根据您系统架构进行编译: # gcc –o stackpointer stackpointer.c 让我们看看stackpointer.c代码,看看如何验证堆栈地址。...首先,在程序主要部分中,status被声明为值为0未分配长变量(扩展大小变量)。下一步是打印变量状态堆栈值。 当我们多次执行堆栈指针程序时,您可能会看到每次执行程序时,地址值都是随机化。...这可能有点棘手,但有一种方法是复制原始overflow.c编程为不同名称(例如,verflow_stackpointer.c),并将第12行添加到新文件中,这将在读取函数之前打印堆栈地址位置,就像我们在

    1.4K20

    文本操作3(cut,sort)

    需求 检查当前系统中各种shell程序,统计出它们各被多少用户所使用,并把统计结果按照从多到少排序打印出来 解决方案 每个用户所使用登录shell都保存在系统文件/etc/passwd中,我们已经知道这个文件中每一行对应一个用户信息...因此可以使用cut命令提取shell程序字段,在通过sort命令进行合并,然后使用uniq命令统计各个shell使用次数,最后通过sort命令对数字进行排序。...#cut命令从文件中每一行数据中剪切出一部分 #sort命令对数据按照行进行排序,把相同shell程序放在一起 #uniq -c命令删除相同行,统计重复次数 [root@akuilinux01 shellXT...然后在通过uniq -c命令合并和统计,就可以得到每一种shell程序使用次数,为了把使用次数最多放在最前面,还要再一次根据数字大小进行排序。...sort命令默认是根据字符顺序进行排序,加上-nr选项就可以从大到小排序了 如果不进行统计操作,只是把重复去掉,就没有必要使用uniq命令,sort -u就可以完成这个工作,如下: [root@akuilinux01

    54020
    领券