数据结构复习【第三章】 栈

1)掌握栈的相关概念、特点和基本操作(入栈、出栈、判栈空、获取栈元素等)。

栈:限制只能在表的一端进行插入和删除的线性表。

允许插入和删除的一端,称为栈顶(top)。

不允许插入和删除的另一端,称为栈底(bottom)。

把一个元素从栈顶放入栈中的操作,称为进栈、入栈或压栈 (push)

从栈顶取出一个元素的操作称为出栈或弹出(pop)。

特点:后进先出

2)掌握顺序栈、链栈、共享栈的实现。

顺序栈:

基本操作:

扫描二维码关注公众号,回复: 3290019 查看本文章

  创建:

{
     base = new T[m];
     if (base = = NULL)    {        
        exit(1);
    }
     stacksize = m;
     top=-1;
}

  入栈:

{
   if (top = = stacksize-1)
       throw "栈满,无法入栈";
   top++;                                        
   base[top]=x;
}

  出栈:

{
   if ( top = = -1)
      throw “栈空,不能出栈”; 
   x = base[top--];
   return x;
}

  判断栈空:top==-1

    获取栈顶元素:

{
    if ( top = = -1 )
       throw "栈空,栈顶无元素";
     return base[top];
}

 

链栈:

  结点定义:

struct Node
{
    T data;
    Node<T> *next;//此处T可以省略
};

  入栈:

{  
     s=new Node<T>;
     s->data=x; 
     s->next=top;
      top=s;
}

  出栈:

{    
    if (top = = NULL)
        throw"下溢";     
    p = top;
    x = top->data;                                  
    top = top->next;                              
    delete p;                                      
    return x;
}

两者比较:

3)掌握栈的典型应用:

        ① 递归;

        ② 表达式的表示及其求值。

中缀表达式求值:

Step 1:表达式结束符进操作符栈 
Step 2:读入表达式操作数或操作符
Step 3:如果读到的字符不是表达式结束符或者操
               作符栈的栈顶元素不是结束符,则进行下
               列操作:
       3.1  如果是操作数,入操作数栈,读入下一个
            字符
       3.2  如果是操作符,把操作符栈的栈顶元素 (θ1)
              与它(θ2)比较
           3.2.1 如果比较结果是:θ1<θ2,则该操作
                    符进栈,读入下一个字符
           3.2.2 如果比较结果是:θ1 =θ2 ,操作符
                    退栈,消去一个括号,读入下一个字符
           3.2.3 如果比较结果是:θ1>θ2,从操作符栈
                    退出一个运算符,从操作数栈退出二个
                     操作数,进行运算,并将运算结果入操
                     作数栈
Step 4:操作数栈顶元素即为表达式计算结果 

例:1 + 2 * ( 7 – 4 ) / 3 

操作数栈变化:

改为后缀表达式:(遇到运算符,出栈两个数字运算,并把结果放到栈中)

1、写出中缀表达式
2、按运算先后把每一次运算用括号括起
3、把运算符移至对应的括号的后面
4、去除括号

求值过程中栈的变化:

猜你喜欢

转载自www.cnblogs.com/yg1024/p/9690295.html