push_swap
1.0.0
在堆栈上排序数据
该项目将使用最低的操作数量,使您在堆栈上对堆栈进行分类。为了成功,您必须操纵各种类型的算法,然后选择最合适的解决方案(在许多方面)进行优化的数据排序。 Version: 6 。
您可以阅读主题: push_swap.pdf
使用最小数量的移动,2个堆栈和有限的操作组对整数的随机列表进行排序。
您从两个空堆栈开始: a和b 。通过命令行参数为您提供整数的随机列表。
仅允许这些举动:
sa :交换A-交换堆栈顶部的前两个元素。如果只有一个或没有元素,什么也不做。sb :交换B-交换堆栈顶部的前两个元素b。如果只有一个或没有元素,什么也不做。ss : sa和sb同时。pa :推A-将第一个元素位于B的顶部,然后将其放在A的顶部。如果B是空的,请什么都不做。pb :推动B-将第一个元素放在A顶部,然后将其放在B的顶部。如果A为空,什么也不做。ra :旋转A-将堆栈A的所有元素移到1。第一个元素成为最后一个元素。rb :旋转B-将堆栈B的所有元素移动1。第一个元素成为最后一个元素。rr : ra和rb同时。rra :反向旋转A-将堆栈A的所有元素移动1。最后一个元素成为第一个元素。rrb :反向旋转B-将堆栈B的所有元素移动1。最后一个元素成为第一个元素。rrr : rra和rrb同时。最后,堆栈B必须空空,所有整数必须在堆栈A中,按顺序排序。
创建两个程序: checker和push_swap 。
checker程序读取从stdin中读取整数的随机列表,存储它们,并检查是否对它们进行了排序。
push_swap程序计算动作以对整数进行排序 -按下,弹出,交换和旋转它们在堆栈A和堆栈B之间 - 并在Stdout上显示这些方向。
您可以将push_swap送入checker , checker将验证push_swap的说明成功。
这两个程序都必须强制解析错误的输入,包括空字符串,无参数,非数字参数,重复项和无效/不存在指令。
push_swap必须符合42规范。
严格禁止使用正常的libc函数。但是,学生可以使用: write , read , malloc , free , exit 。它一定没有内存泄漏。错误必须仔细处理。
它绝不能以意外的方式退出(分段故障,总线错误,双免费等)。
所有错误,例如:错误的命令,文件的权限等,需要处理。
测试仪