栈、队列与串

(一)栈(stack)
定义:是限定仅在表尾进行插入和删除的操作
(先进后出)
1、一般定义允许插入与删除的一端为栈顶(top),另一端为栈底。(bottom)
2、栈的插入称进栈、压栈、入栈。
栈的删除称出栈、弹栈。
解决栈空间浪费的操作有:两栈共享空间
3、栈的使用过程中元素变化不可预料,有时候很小或很大,最好是用链栈,反之则用顺序栈。
4、栈的应用:
①递归(Fibonacci)
Fibonacci一般的c语言实现代码(1):
C语言递归实现代码(2):
②四则运算表达式求值
一般运算都是中缀式,首先把中缀式转化为后缀式。然后通过两个栈完成数据的计算。

  栈的应用:浏览器历史记录,Android中的最近任务,    

  Activity的启动模式,cpu中栈的实现,word自动保存,
    
  解析计算式,解析xml/json

(二)队列(queue)
定义:只允许在一端进行插入操作,另一端进行删除操作。(先进先出的线性表)
循环队列:
把队列头尾相接的顺序存储结构。
判断队满与队空的条件。
链队列:入队,出队
考察重点:
循环队列判断队空队满
队空:front=rear
队满:(rear+1)mod(mixsize)
入队:(rear+1)%mixsize
出队:(front+1)%mixsize
队列长度:(rear-front+1)%mixsize

链接方式存储队列,进行删除运算时:
头尾指针可能都需要删除
有头结点的情况下,只需修改队头指针
若只有一个结点,该结点即是队头又是队尾,则需要都动

适合建立优先级队列:堆
适合处理函数调用:堆栈

(三)串(string)
定义:由零个或者多个字符组成的有限序列,又称字符串
应用主要有在串中在一个子串:
朴素的模式匹配算法(暴力查找算法)
KPL模式算法。
KPL模式算法改进。

你可能感兴趣的:(数据结构,数据结构)