说明:
往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉。下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了。
一、实现
1.程序功能
关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换。
2.预定义、头文件导入和类型别名
代码如下:
1 2 3 4 5 6 7 8 9 10 |
|
除了两个头文件的导入是必须的之外,下面做两点说明:
(1)其余的常量定义都是可选的,为的就是在下面的代码书写过程中可以尽量使用英文来表达程序的意思,而不是在代码的实现过程中直接使用数字,依个人喜欢,也可以直接使用数字;
(2)使用typedef做类型的别名也仅仅是为了程序中代码的意思更加清晰明了而已,实际也可以不这样使用;
3.顺序栈的定义
代码如下:
1 2 3 4 5 6 |
|
4.栈的初始化
代码如下:
1 2 3 4 5 6 7 8 |
|
5.空栈的判断
代码如下:
1 2 3 4 5 6 7 8 |
|
6.入栈
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
7.出栈
代码如下:
1 2 3 4 5 |
|
8.进制转换的函数
其实上面的步骤操作都是为了创建一个顺序栈和定义顺序栈的操作而已,并对可能出现的各种情况做一些相应的举措,完毕后,下面就要使用上面创建的顺序栈以及栈的操作接口了,即在数制转换函数(这里是十进制转八进制)中使用上面的操作接口,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
9.main函数
进制转换函数调用栈操作的接口函数,以实现在数制转换过程中栈的操作;main函数调用数制转换函数,以实现数制的转换,代码如下:
1 2 3 4 5 |
|
二、执行
有了上面的代码后,就可以在编译器中编译执行了,这里我是用c free 5来进行程序代码的编译:
(1)输入的数为1348时的结果:
(2)输入的数为2526时的结果:
三、完整的代码
下面把代码都放在一起:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
|