seo建站营销,wordpress模板文件命名,wordpress输入命令,淮南公司做网站堆栈什么是堆栈堆栈的抽象数据类型描述栈的顺序存储实现 堆栈
什么是堆栈
计算机如何进行表达式求值#xff1f; 算术表达式56/2-3*4。 正确理解#xff1a; 56/2-3*4 53-3*4 8-3*4 8-12 -4 由两类对象构成的#xff1a; 运算数#xff0c;如2、3、4 运算符号…堆栈什么是堆栈堆栈的抽象数据类型描述栈的顺序存储实现 堆栈
什么是堆栈
计算机如何进行表达式求值 算术表达式56/2-3*4。 正确理解 56/2-3*4 53-3*4 8-3*4 8-12 -4 由两类对象构成的 运算数如2、3、4 运算符号如、-、*、/ 不同运算符号优先级不一样 后缀表达式 中缀表达式运算符号位于两个运算数之间。如 a b * c - d / e 后缀表达式运算符号位于两个运算数之后。如 a b c * d e /- 后缀表达式求值策略从左向右“扫描”逐个处理运算数和运算符号 1. 遇到运算数怎么办如何“记住”目前还不未参与运算的数 2. 遇到运算符号怎么办对应的运算数是什么 6 2 / 3 - 4 2 * ? 6/2-34*2 注意后缀的运算数是紧挨着运算符号之前的两个数 启示需要有种存储方法能顺序存储运算数 并在需要时“倒序”输出 堆栈Stack 具有一定操作约束的线性表 只在一端栈顶Top做 插入、删除 插入数据入栈Push 删除数据出栈Pop 后入先出Last In First OutLIFO
堆栈的抽象数据类型描述
类型名称: 堆栈Stack
数据对象集一个有0个或多个元素的有穷线性表。
操作集长度为MaxSize的堆栈S Stack堆栈元素item ElementType
1、Stack CreateStack( int MaxSize ) 生成空堆栈其最大长度为MaxSize 2、int IsFull( Stack S, int MaxSize )判断堆栈S是否已满 3、void Push( Stack S, ElementType item )将元素item压入堆栈 4、int IsEmpty ( Stack S )判断堆栈S是否为空 5、ElementType Pop( Stack S )删除并返回栈顶元素 Push 和 Pop 可以穿插交替进行 按照操作系列 (1)Push(S,A), Push(S,B),Push((S,C),Pop(S),Pop(S),Pop(S) 堆栈输出是 CBA
(2) 而Push(S,A), Pop(S),Push(S,B),Push((S,C),Pop(S),Pop(S) 堆栈输出是? ACB
栈的顺序存储实现
栈的顺序存储结构通常由一个一维数组和一个记录 栈顶元素位置的变量组成。 1.入栈 2.出栈 3.判断 栈满 栈空
typedef int Position;
struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 */int MaxSize; /* 堆栈最大容量 */
};
typedef struct SNode *Stack;Stack CreateStack( int MaxSize )
{Stack S (Stack)malloc(sizeof(struct SNode));S-Data (ElementType *)malloc(MaxSize * sizeof(ElementType));S-Top -1;//top值为零说明栈里有一个元素-1代表堆栈空S-MaxSize MaxSize;return S;
}bool IsFull( Stack S )
{return (S-Top S-MaxSize-1);
}bool Push( Stack S, ElementType X )
{if ( IsFull(S) ) {printf(堆栈满);return false;}else {S-Data[(S-Top)] X;return true;}
}bool IsEmpty( Stack S )
{return (S-Top -1);
}ElementType Pop( Stack S )
{if ( IsEmpty(S) ) {printf(堆栈空);return ERROR; /* ERROR是ElementType的特殊值标志错误 */}else return ( S-Data[(S-Top)--] );
}堆栈的其他应用 函数调用及递归实现 深度优先搜索 回溯算法 。。。