Page 91 - 高中 信息技术 选择性必修1 数据与数据结构
P. 91

 3.4 用栈组织后进先出数据







                         可以用一维数组来实现用于存储顺序栈中数据元素的存储区域,首先定义一个足够大
                    (Maxsize)的一维数组,将数组下标为0的一端设为栈底,top指针指向栈顶元素的具体位
                    置有两种方法:一种是让top指针始终指向栈顶元素所在的位置,当top= -1时表示空栈

                    (如图3-20所示);另一种是让top指针指向栈顶元素的下一个位置,当top= 0时表示空栈
                    (如图3-21所示)。










                                             广东教育出版社









                         (a)空栈              (b)3个元素的栈                            (a)空栈            (b)3个元素的栈

                           图3-20 Top指针指向栈顶元素                              图3-21 Top指针指向栈顶元素的下一个位置


                         由于栈是一个动态结构,而数组是一个静态结构,所以在顺序栈的操作过程中会有
                    “溢出”情况的出现。当栈满时,如果再有元素入栈,将会产生“上溢(Overflow)”;

                    当栈空时,如果再执行出栈操作,将会产生“下溢(Underflow)”。为了避免发生栈溢出
                    情况,在进行入栈和出栈操作前应先检测栈是否已满或已空。
                         顺序栈的程序定义如下:
                         typedef struct

                         {
                           string items[maxsize];
                           int top;

                         }CarStack;
                         其中,maxsize为栈中允许存放元素个数的最大值,top是栈顶标志,指示存放数组的
                    下标,不是真正的指针,当top= -1时表示空栈,当top= maxsize -1时表示满栈。

                         顺序栈的操作可用如表3-6所示的程序代码实现。



                                                      表3-6  顺序栈的操作代码

                             功能                                            程序段

                                           void InitStack(CarStack &st)
                                           {
                       初始化栈。
                                             st.top=-1;  //把栈顶指针置为-1
                                           }


                                                                                                                    83 83







          21X2204.indd   83                                                                                        2019/9/26   13:53:19
   86   87   88   89   90   91   92   93   94   95   96