优秀个人网站主页,wordpress png 压缩,滁州建设厅网站,湖南人文科技学院二#xff0c;堆栈 中缀表达式#xff1a;运算符位于两数之后#xff1b; ab*c-d/e 后缀表达式#xff1a;运算符位于两数之后#xff1b; abc*de/-#xff1b;计算机表示式求解时的读法#xff1b;用堆栈实现计算 前缀表达式#xff1a;运算符位于两数之前#xff1b… 二堆栈 中缀表达式运算符位于两数之后 ab*c-d/e 后缀表达式运算符位于两数之后 abc*de/-计算机表示式求解时的读法用堆栈实现计算 前缀表达式运算符位于两数之前 -a*bc/de 堆栈操作受限制的线性表先入后出只在一端栈顶top)做插入和删除 push和pop为最常用的操作可以交替进行 栈的顺序存储实现用数组实现堆栈 #define MAXSIZE 10
typedef struct {int Data[MAXSIZE];int Top; //指向栈顶的位置
}Stack; void Push(Stack *PtrS, int item)//item为待插入元素
{if (PtrS-Top MAXSIZE){printf(堆栈满); return;}else{PtrS-Data[(PtrS-Top)] item;//先把指向top的指针指向下一位再往该位置插入数字return;}
} int Pop(Stack *PtrS)
{if (PtrS-Top-1){printf(栈为空);return -NAN; //此处只要是特殊值标志错误}else{return(PtrS-Data[(PtrS-Top)--]);//返回栈顶的值之后需要把栈顶的指针的值往下移动一位}
} 一个数组实现两个堆栈一个指向数组头一个指向数组尾部当两个指针相邻时数组满即两头向中间生长 堆栈的链式存储实现 用链表表示堆栈链栈实际是个单链表。插入和删除操作只能在链栈的栈顶进行。即栈顶Top应该在链表的头不能在尾部单向链表只能找到下一项找不到上一项 typedef struct NodeStack {int Data;struct NodeStack *Next;
}LinkStack;void LinkPush(int item, LinkStack *S)
{LinkStack *temp new LinkStack;temp-Data item;temp-Next S-Next;S-Next temp;
}int LinkPop(LinkStack *S)
{LinkStack *temp new LinkStack;int result;if (S-Next NULL){printf(堆栈空);return NULL;}else{temp S-Next;//删除某一个数时需要定位到该数之前的那个数S-Next temp-Next;result temp-Data;delete(temp);return result;}
} 中缀表达式转换成后缀表达式堆栈实现复杂度为n 运算数直接输出左括号压栈右括号输出栈顶元素直到遇到左括号出栈不输出运算符大于栈顶压栈小于等于栈顶输出栈顶比较新栈顶循环压栈括号内的运算符依旧遵循此规则堆栈存留一一输出 小于等于栈顶时栈顶输出 后缀表达式可以用堆栈求出其具体数值 把运算数压入栈中遇到运算符取出栈顶两元素运算后的结果压入栈中继续 堆栈其他作用 函数调用及递归实现深度优先搜索回溯算法转载于:https://www.cnblogs.com/xiaoxue126/p/9036568.html