- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 节 栈和队列数据结构课件.ppt
1.栈
2.栈的应用--表达式计算
3.队列
4.队列的应用举例--打印二项展开式的系数
5.优先级队列(Priority Queue);1.栈(stack);2) 栈的类定义(抽象数据类型);3)顺序栈--栈的顺序存储表示;顺序栈的类说明为:;取栈顶元素
template class Type Type StackType::GetTop()
{ assert(!IsEmpty( ));
return elements[top];
}
对于要开辟两个栈,为了避免栈有时太大,有时太小.
0 maxsize-1
栈1的底 top1 top2 栈2的底
只有当top1=top2时才溢出.
;4) 链式栈;template class Type class Stack
{ public:
Stack( ): top(NULL){ }
~Stack( );
void Push(const Type item);
Type Pop( );
Type GetTop( );
void MakeEmpty( ); //实现同~Stack( )
int IsEmpty( ) const{return top==NULL;}
private:
StackNodeType *top; //栈顶指针
};;析构函数
一个结点一个结点地删除,直至top==NULL.
template class Type void StackType::~Stack( )
{ StackNode Type *p;
while(top!=NULL)
{p=top; top=top-link; delete p;}
}
; push操作(进栈操作)
将新元素插入到链式栈的栈顶
; pop操作(删除栈顶结点,返回被删栈顶元素的值)
;2.栈的应用--表达式的计算;2) 后缀表达式求值;3)中缀表达式转换为后缀表达式; 如上例:A+B*C@-->ABC*+@
; 栈内优先级(in stack priority)--ISP
栈外优先级(in coming priority)--ICP
对其它运算符进栈后优先级都加1,这是为了保证相同优先级的运算符自左向右计算的要求.
例如:a+b+c@-->ab+c+@;遇‘)’:依次输出栈顶直至匹配的‘(’为止.‘(’不输出,
但要退栈.
遇@(或其它结束符时):依次输出栈顶,直至‘#’为
止.‘#’不输出,但要退栈.;3 .队列(queue);3) 循环队列--队列的顺序存储表示(Circular Queue)
队列也有两种存储方式:顺序方式、链接方式。
顺序方式: ;
队列在插入、删除过程中会发生:
;环:把element数组看成是一个逻辑环,即:
队头指针进1:front = (front + 1) % maxsize
队尾指针进1:rear = (rear + 1) % maxsize
但这时有一个新问题:
这时如何区分队满与队空?
;下面是循环队列的类声明以及成员函数的声明:
#include assert.h
template class Type class Queue
{ public:
Queue (int=10);
~Queue( ) {delete [] elements;}
void EnQueue( const Type item);
Type DeQueue ( );
Type GetFront( );
void MakeEmpty ( ) {front=rear=0;}
int IsEmpty( ) const {return front==rear;}
int IsFull( ) const {return (rear+1) % m
文档评论(0)