数据结构经典案例 下载本文

48. } 49.

50. void Creat(st ta[], int n) 51. {

52. ta[0].name = 'A'; 53. ta[0].top = n-1;

54. //把所有的圆盘按从大到小的顺序放在柱子A上 55. for (int i=0; i

57. //柱子B,C上开始没有没有圆盘 58. ta[1].top = ta[2].top = 0; 59. for (int i=0; i

60. ta[1].s[i] = ta[2].s[i] = 0;

61. //若n为偶数,按顺时针方向依次摆放 A B C 62. if (n%2 == 0) 63. {

64. ta[1].name = 'B'; 65. ta[2].name = 'C'; 66. }

67. else //若n为奇数,按顺时针方向依次摆放 A C B 68. {

69. ta[1].name = 'C'; 70. ta[2].name = 'B'; 71. } 72. } 73.

74. long Pow(int x, int y) 75. {

76. long sum = 1;

77. for (int i=0; i

80. return sum; 81. } 82.

83. void Hannuota(st ta[], long max) 84. {

85. int k = 0; //累计移动的次数 86. int i = 0; 87. int ch;

88. while (k < max) 89. {

90. //按顺时针方向把圆盘1从现在的柱子移动到下一根柱子 91. ch = ta[i%3].Pop(); 92. ta[(i+1)%3].Push(ch); 93. cout << ++k << \

94. \95. \96. i++;

97. //把另外两根柱子上可以移动的圆盘移动到新的柱子上 98. if (k < max) 99. {

100. //把非空柱子上的圆盘移动到空柱子上,当两根柱子都为空时,移动较小的圆盘

101. if (ta[(i+1)%3].Top() == 0 || 102. ta[(i-1)%3].Top() > 0 &&

103. ta[(i+1)%3].Top() > ta[(i-1)%3].Top()) 104. {

105. ch = ta[(i-1)%3].Pop(); 106. ta[(i+1)%3].Push(ch);

107. cout << ++k << \

108. << ch << \109. << \110. } 111. else 112. {

113. ch = ta[(i+1)%3].Pop(); 114. ta[(i-1)%3].Push(ch);

115. cout << ++k << \

116. << ch << \117. << \118. } 119. } 120. } 121. }