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 。它一定沒有內存洩漏。錯誤必須仔細處理。
它絕不能以意外的方式退出(分段故障,總線錯誤,雙免費等)。
所有錯誤,例如:錯誤的命令,文件的權限等,需要處理。
測試儀