1、表ADT
表的数组实现:
对表的所有操作都是可以通过使用数组来实现的。虽然数组是动态指定的,但是还是需要对表的大小的做大致进行估计。通常需要估计的大一些,从而浪费大量的时间,这是严重的局限。
表的链表实现:
为避免插入和删除的线性开销,我们需要允许表可以不连续存储,否则表的部分或者全部需要整体移动。
链表由一系列不存在内存中相连的结构组成。每一个结构均含有表元素和只想包含该元素后继元的结构的指针。最后一个单元的next指针指向NULL。
首先,平布存在从所给定义出发在表的前面插入元素的真正显性的方法。
第二,从表的前面实型删除是一个特殊情况,因为她改变了表的起始段。
第三,这个问题设计一般的删除。
解决办法:增加头结点。
2、栈(ADT)
栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(Top)。
对栈的基本操作有push(进栈)和pop(出栈)
由于栈是一个表,因此任何实现表的方法都能实现栈。
栈的链表实现
栈的第一种实现方式 是使用单链表,我们通过在表顶端插入来实现push,再通过删除表顶端元素实现pop。
栈的数组实现
栈的数组实现是比较流行的方法,这种策略的唯一潜在的危害是需要提前申明一个数组的大小。
栈的应用:
检验是否每个符号都能成对出现,
做一个空栈。读入字符直到文件尾。如果字符是一个开放符号,则将其推入栈中。如果字符是一个封闭符号,则将栈空时报错。否则,将栈元素弹出。
如果弹出的符号不是对应的开放符号,则报错。在文件尾,如果栈非空则报错。
后缀表达式:
后缀表达式其求值过程:计算问题最容易的方法是使用一个栈,当见到一个数时就把它推入栈中,在遇到一个运算符时该运算符就从该栈中
弹出两个数,将所得结果推入栈中。
函数调用
检测平衡符号的算法提供了一种实现函数调用的方法。当调用一个新函数时,主调例程的所有局部变量需要系统存储起来,否则被调用的新函数将会
覆盖调用例程的变量。该主调例程的当前位置必须要存储,以便在新函数运行完后知道向哪转移。