72.png

    1. /*
    2. 利用栈进行车厢调度,使软座全部位于硬座前面
    3. 分析:
    4. 原文题目较长,但仔细分析后,这道题是一类较为简单的题。这里其实也并不需要用到栈的先入后出的特性,仅仅需要将硬座
    5. 暂存,让软座先出去而已,所以将栈换成其他结构也是可以的,只要能够暂存数据。但这里题目要求用栈。
    6. 为了模拟列车座位,我们采用两个数组来存储,数组A为入口处火车,数组B为出口处火车,A内数据依次入栈,若为硬座则压入
    7. 栈,若为软座则直接进入B,最后栈内元素全部出栈,入B,至此,完成要求。
    8. */
    9. #include <stdio.h>
    10. #include <stdlib.h>
    11. struct Stack {
    12. char *arr;
    13. int len;
    14. int top;
    15. };
    16. void trainArrange(char *arrA,char *arrB,Stack *s) {//传入入口车厢,出口车厢,栈
    17. int i = 0, j = 0;
    18. char *c;//接收出栈硬座
    19. bool push(Stack *,char );
    20. char *top(Stack *);
    21. bool pop(Stack *);
    22. bool empty(Stack *);
    23. while (i<10) {
    24. if (arrA[i]=='H') {//硬座,入栈
    25. push(s,arrA[i]);
    26. }
    27. else {//软座,入B
    28. arrB[j++] = arrA[i];
    29. }
    30. i++;
    31. }
    32. while (!empty(s)) {//若栈中还有硬座,全部入B
    33. c = top(s);
    34. pop(s);
    35. arrB[j++] = *c;
    36. }
    37. }
    38. int main() {
    39. char arrA[10] = {'H','S','S','H','H','S','S','S','H','H' };//用H代表硬座,S代表软座
    40. char arrB[10] = { 0 };//B数组初始为空
    41. Stack *createStack(int);
    42. Stack *s;
    43. s = createStack(10);//创建栈
    44. trainArrange(arrA,arrB,s);
    45. for (int i = 0; i < 10;i++) {//打印重排后的车厢
    46. printf("%c",arrB[i]);
    47. }
    48. return 0;
    49. }