码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构.栈

时间:2015-03-05 16:13:13      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

一、基本概念

1.栈是限定仅在表尾(栈顶)进行插入和删除操作的线性表;

2.栈:后进先出(LIFO),适用于撤销操作

二、存储结构

1.栈的顺序存储结构:

1)数组的首元素作栈底

2)两栈共享空间

2.栈的链式存储结构:

链栈不需要头结点

三、栈的应用:

1.经典递归例子:斐波那契数列

递归函数:直接调用自己或通过一系列的调用语句间接调用自己的函数。

每个递归定义必须至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出。 (迭代使用的是循环结构,递归使用的是选择结构)

2.栈的应用——四则运算表达式求值:

后缀表达式:所有符号都是在要运算数字的后面出现。

代码示例:

技术分享
 1 ///Name:Stack
 2 ///Author:JA
 3 ///Date:2015-3-4
 4 
 5 
 6 
 7 ///算术表达式求值的算符优先算法。设OPTR和OPND分别为运算符栈和运算数栈,
 8 ///OP为运算符集合。
 9 OperandType EvaluateWxpression(){
10     InitStack(OPTR); Push(OPTR, #);
11     InitStack(OPND); c = getchar();
12     while (c != # || GetTop(OPTR) != #){
13         if (!In(c, OP)){ Push(OPND, C); c = getchar(); }
14         else
15             switch (Precede(GetTop(OPTR), c)){
16             case<:    //栈顶元素优先权低
17                 Push(OPTR, c); c = getchar();
18                 break;
19             case=:   //脱括号并接收下一字符
20                 Pop(OPTR, x); c = getchar();
21                 break;
22             case>:    //出栈并将运算结果入栈
23                 Pop(OPTR, theta);
24                 Pop(OPND, b); Pop(OPND, a);
25                 Push(OPND, Operate(a, theta, b);
26                 break;
27         }//switch
28     }//while
29     return GetTop(OPND);
30 }//EvaluateExpresssion
31 
32 ///n阶汉诺塔问题
33 void hanoi(int n, char x, char y, char z){
34     if (n = 1)
35         move(x, 1, z);                //将编号为1的圆盘从x激至z
36     else{
37         hanoi(n - 1,x,z,y);           //将x上编号为1至n-1的圆盘移到y,z作辅助塔
38             move(x, n, z);           //将编号为n的圆盘从x激至z
39         hanoi(n - 1, y, x, z);        //将y上编号为1至n-1的圆盘移到z,x作辅助塔
40     }
41 }
View Code

技术分享

数据结构.栈

标签:

原文地址:http://www.cnblogs.com/joeaaron007/p/4315865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!