(1)掌握栈的相关概念、特点和基本操作(入栈、出栈、判栈空、获取栈元素等)。
栈:限制只能在表的一端进行插入和删除的线性表。
允许插入和删除的一端,称为栈顶(top)。
不允许插入和删除的另一端,称为栈底(bottom)。
把一个元素从栈顶放入栈中的操作,称为进栈、入栈或压栈 (push)
从栈顶取出一个元素的操作称为出栈或弹出(pop)。
特点:后进先出
(2)掌握顺序栈、链栈、共享栈的实现。
顺序栈:
基本操作:
创建:
{ 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、去除括号
求值过程中栈的变化:
原文地址:https://www.cnblogs.com/yg1024/p/9690295.html
时间: 2024-10-18 19:44:32