给定一个整数数组asteroids[],表示在同一行的行星。 
对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。
找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。
来源:力扣(LeetCode)735

堆栈操作如下,可直接调用:
 Status InitStack(Stack &S)
 Status GetTop(Stack S,int &e)
 Status Push(Stack &S, int x)
 Status Pop(Stack &S, int &x)
 Status StackEmpty(Stack S)
 
示例 1:
输入:asteroids = [5,10,-5]
输出:[5,10]
解释:10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。

示例 2:
输入:asteroids = [8,-8]
输出:[]
解释:8 和 -8 碰撞后,两者都发生爆炸。

示例 3:
输入:asteroids = [10,2,-5]
输出:[10]
解释:2 和 -5 发生碰撞后剩下 -5 。10 和 -5 发生碰撞后剩下 10 。

示例 4:
输入:asteroids = [10,2,-5,-20,5]
输出:[-20,5]
解释:

示例 5:
输入:asteroids = [-10,2,-5,-20,5]
输出:[-10,-5,-20,5]
解释:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stddef.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define STACK_INIT_SIZE 100
typedef int Status;typedef struct {int *base;int *top;  int stacksize;
}Stack;Status InitStack(Stack &S)
{S.base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));if(!S.base) exit(OVERFLOW);S.stacksize = STACK_INIT_SIZE;S.top = S.base;return OK;
}//InitStackStatus GetTop(Stack S,int &e)
{   if (S.top==S.base) return ERROR;e = *(S.top-1);return OK;
}Status Push(Stack &S, int x)
{if(S.top - S.base  >= S.stacksize ) return OVERFLOW;*S.top++ = x;return OK;
}//pushStatus Pop(Stack &S, int &x)
{if(S.top == S.base ) return ERROR;x = *(--S.top); return OK;
}//popStatus StackEmpty(Stack S)
{if(S.top == S.base ) return TRUE;else return FALSE;
}//形参分别为存行星的整型数组,数组大小
int  asteroidCollision(int* asteroids, int asteroidsSize){Stack leftStack,rightStack;int e;InitStack(leftStack);//存左行星,他左侧没有右行星 InitStack(rightStack);//存右行星,等待左行星到来 int i=1,flag=1;int x;if(asteroids[0]<0) //若第一个元素为负数,则入左栈{  Push(leftStack,asteroids[0]); }else{ Push(rightStack,asteroids[0]); } //否则,入右栈while(i<asteroidsSize){if(asteroids[i]>0) //若大于零直接入右栈{Push(rightStack,asteroids[i]);}else{while(!StackEmpty(rightStack)) //若右栈不空{ GetTop(rightStack,e); //取右栈顶元素if(abs(asteroids[i])>e){Pop(rightStack,x);} //右栈弹出一个元素else if(abs(asteroids[i])<e){break;}else //若相等则右栈弹出一个元素,flag置0{Pop(rightStack,x);flag=0;break;}}//若flag为0,则不往左栈里添加元素if(StackEmpty(rightStack) && flag){Push(leftStack,asteroids[i]);}}i++;}//循环输出左栈数据元素while(leftStack.base != leftStack.top){printf("%d ",*(leftStack.base));leftStack.base++;}//循环输出右栈数据元素while(rightStack.base != rightStack.top){printf("%d ",*(rightStack.base));rightStack.base++;}return OK;}int main(int argc, char** argv)
{   int nums[100];for(int i=1; i<argc; i++)nums[i-1] = atoi(argv[i]);asteroidCollision(nums,argc-1); return OK;
}

行星碰撞(C语言实现)相关推荐

  1. 【每日一算法】行星碰撞

    微信改版,加星标不迷路! 每日一算法-行星碰撞 给定一个整数数组 asteroids,表示在同一行的行星. 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表 ...

  2. Java实现 LeetCode 735 行星碰撞(栈)

    735. 行星碰撞 给定一个整数数组 asteroids,表示在同一行的行星. 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动).每一颗行星以相 ...

  3. JAVA基础算法练习(5):行星碰撞

     ------文章底部代码分享 一.题目 标题:行星碰撞 给定一个整数数组 asteroids,表示在同一行的行星.对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移 ...

  4. 【735. 行星碰撞】

    来源:力扣(LeetCode) 描述: 给定一个整数数组 asteroids,表示在同一行的行星. 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移 ...

  5. 【LeetCode】735. 行星碰撞

    题目 735. 行星碰撞 难度中等342收藏分享切换为英文接收动态反馈 给定一个整数数组 asteroids,表示在同一行的行星. 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方 ...

  6. 太阳系八大行星碰撞的视频_火星的身世:从太阳系的起源说起

    大约46亿年前 盘状的太阳星云 从一大片又冷又暗的 气体云中诞生 太阳自己并没有任何暴露确切年龄的线索,我们之所以能够知道太阳系的"生日",是因为迄今从陨石中找到的最古老固体物质, ...

  7. LeetCode 735. 行星碰撞(栈)

    1. 题目 给定一个整数数组 asteroids,表示在同一行的行星. 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动).每一颗行星以相同的速度 ...

  8. Leetcode刷题记录 735. 行星碰撞

    给定一个整数数组 asteroids,表示在同一行的行星. 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动).每一颗行星以相同的速度移动. 找出 ...

  9. Leetcode 735. 行星碰撞

    基本思路: 很简单.首先来一个辅助数组,最好是用栈,但是返回的结果不是数组么.所以直接用数组吧.      然后这么考虑: 从左往右遍历输入的数组,每遍历到一个值,若它能和辅助数组的最右边的行星发生碰 ...

最新文章

  1. react中使用构建缓存_如何在React中构建热图
  2. mysql 主从同步不一致_涨知识!MySQL 主从同步原理原来是这样的
  3. 面试准备——Struts2相关问题
  4. Task 10 统计从1到某个整数之间出现的1的次数
  5. JDK 12 Early Access Build 12中的原始字符串文字支持
  6. win8 apache php mysql_windows8.1下Apache+Php+MySQL配置步骤
  7. Python天天美味(4) - isinstance判断对象类型
  8. 一个人独立完成一个网站上线的前前后后
  9. Glide Golang包管理
  10. 我的博客也是男的(还好)
  11. 他25岁进贝尔实验室,32岁提信息论,40岁办达特茅斯会议,晚年患上阿兹海默 | 人物志...
  12. vab宏与数据据笔记一(启用宏)
  13. axure中继器求和_Axure学习笔记:中继器之价格统计
  14. 93.<报错 SyntaxError: Unexpected token R in JSON at position 0 at JSON.parse (<anonymous>)的解决方法>
  15. Monte-Carlo Dropout,蒙特卡罗 dropout
  16. 你所不知道的VR全景拍摄地拍步骤和细节
  17. 04_Initial Design/Floorplan实操2021-09-08上午
  18. AppStore的渠道推⼴数据统计问题
  19. 工作介绍xml书包文件
  20. VXLAN vs VLAN

热门文章

  1. 计算机视觉常识(研究方向简介、需要的知识储备)
  2. 微信开通检测工具如何检测效果最好
  3. shell wait的用法及使用“和wait”并行运行
  4. V8引擎如何回收内存以及如何优化
  5. 你可能没有细究过的TCP/IP
  6. android闪光灯测心率,手指放在手机摄像头和闪光灯前检测心率的应用是什么原理?...
  7. Java Web财务信息管理系统
  8. Android shell脚本自动启动app,关闭app,遇到crash自动停止
  9. 超级玛丽3通关指南+隐藏点整理
  10. war3 小头像图标位置