顺序栈的应用五:表达式求值

表达式求值

这里介绍一种简单直观的“算符优先法”。

要对一个表达式求值,首先要能够正确解释表达式。
例如,要求对下面的算术表达式求值:
4+2*3-10/5

阅读全文

顺序栈的应用四:求解迷宫路径

迷宫求解

求迷宫中从入口到出口的所有路径是一个典型的程序设计问题。由于计算机解迷宫时,通常用的是”穷举求解“的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。

阅读全文

顺序栈的应用三:行编辑

行编辑程序

一个简单的行编辑程序的功能是:接收用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上进行输入时,不能保证不出差错,因此若在编辑程序中,”每接收一个字符即存入用户数据区“的做法显然不是最恰当的。

阅读全文

顺序栈的应用二:括号匹配的检验

括号匹配

假设表达式中允许包含三种括号:圆括号( )、方括号[ ]和花括号{ },其嵌套的顺序随意。
{ ( [ ] ( ) ) }或[ { ( [ ] [ ] ) } ]等为正确的格式,[ ( ] 、( [ ( ) ) 、( ( ) ]均为不正确的格式。

阅读全文

顺序栈的应用一:数制转换

数制转换

十进制数N与其他d进制的转换一个简单的算法是:
N = (N/d)*d + N%d

阅读全文

用线性表表示的顺序栈

LinearListStack(线性表栈)

github源码
特点:
1.从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线性表操作的子集,是操作受限的线性表。但是从数据类型角度看,栈是和线性表大不相同的两类抽象数据类型。

阅读全文

C封装双向循环链表对象

DoubleCircularLinkedList(双向循环链表)

github源码
特点:

阅读全文

用单链表表示一元多项式及其简单计算

github源码

一元多项式

在数学上,一个一元多项式Pn(x)可以按升幂写为:
Pn(x) = p0 + p1x + p2x^2 + … + pnx^n
它由n+1个系数唯一确定,因此可用一个线性表P来表示。
P = (p0,p1,p2,…,pn)
每一项的指数i隐含在其系数pi的序号里。

阅读全文

C封装双向链表对象

DoubleLinkedList(双向链表)

github源码
特点:
1.在单链表中,nextElem的执行时间为O(1),而priorElem的执行时间为O(n)。这是因为单链表只有一个指示直接后继的指针域。为克服单链表这种单向性的缺点,可以使用双向链表。
2.在双向链表的结点中有两个指针域,其中一指向直接后继,另一指向直接前驱。

阅读全文

C封装单向循环链表对象

SingleCircularLinkedList(单向循环链表)

github源码
特点:
1.表中最后一个结点的指针指向头结点,整个链表形成一个环。由表中任一结点出发均可找到表中其他结点。
2.循环链表的操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p->next是否为空,而是他们是否等于头指针。

阅读全文