- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
n_dsdb3幻灯片培训稿.ppt
第三章 栈和队列 ;3.1栈 ;栈的ADT描述;顺序栈
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
Typedef struct{
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack; ;栈的表示和实现
顺序栈 一维数组s[M] 或先分配一个基本容量,逐段扩大;Status InitStack_Sq(SqStack S) {
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE; return OK;
} //InitStack_Sq
Status GetTop_Sq(SqStack S,SelemType e){
if(S.top==S.base)return ERROR;
e=*(S.top-1);return OK;
}
Status Push_Sq(SqStack S ,SelemType e) {
… *S.top++=e; …
}
Status Pop_Sq(SqStack S ,SelemType e){
… e=*--S.top; …
};链栈
typedef LinkList LinkStack;
InitStack_L(LinkStack S)
Push_L(LinkStack S ,SelemType e)
Pop_L(LinkStack S ,SelemType e)
Status GetTop_L(Linkstack S,SElemType e){
if(!S) return ERROR;
e=S-data;
return OK;
};;;;;1)设立运算符栈
2)设表达式的结束符为“#”预设栈底为“#”
3)若当前字符是操作数,直接发送后缀表达式
4)若当前字符是运算符,且优先级大于栈顶运算符,则入栈,否则退出栈顶运算符发送给后缀表达式。
5)若当前字符是结束符“#”,则自栈顶至栈底依次将栈中所有运算符发送给后缀表达式。
6)若当前运算符是“(”,进栈,对其之前底运算符起隔离作用。
7)若当前运算符是“)”,可视为自相应的“(”开始的表达式的结束,从栈顶起依次退出栈顶运算符发送给后缀表达式,直至栈顶相应运算符为“(”,再将“(”也出栈;后缀表达式求值步骤;汉诺塔问题:
有三个塔座X、Y、Z,X座上插有n个直径大小各不相同编号为1…n的圆盘。现在要求将X上的圆盘移动到Z塔座上。要求遵循以下规则:
每次只能移动一个圆盘
圆盘可以插在X、Y、Z中任一个上
任何时刻都不能将一个大盘压在小盘上;;;;;(1);3.4队列;;表示结构:带头结点的单链表
typedef Linklist Queueptr;
typedef struct {
Queueptr front; //指向头结点
Queueptr rear; //指向队尾
}LinkQueue;
操作实现
Status InitQueue_L(LinkQueue Q);
Status DestroyQueue_L(LinkQueue Q);
Status EnQueue_L(LinkQueue Q,QElemtype e);
Status DeQueue_L(LinkQueue Q,QElemtype e);
注意:删除元???时为最后一个元素时应改写rear指针。 ;表示结构
typedef struct {
QElemtype *base;
int front;
int rear;
}SqQueue;
约定:
空队列front==rear;插入 rear++ ;删除front++
操作: EnQueue,DeQueue,GetHead,QueueLength
空队列判断
不可用用首尾指针相等来判断队列的空
解决办法:1:增加标志位 2:少用一个元素 ;Q.rear=0
Q.front=0;存在问题
设数组大小为M,则:
当Q.front=0,Q.rear=M时,再有元素入队发生溢出——真溢出
当Q.front?0,Q.rear=M时,再有元素入队发生溢出——假溢出
解决方案
队首固定,每次出队剩余元素向前移动——浪费时间
循环队列
基本思想:把队列设想成环形,让sq[0]接在sq[M-1]之后,若Q.rear+1==M,则令Q.rear=0;;0;*队列应用 ;划分无冲突子集算法描述;;;括号
您可能关注的文档
最近下载
- 《信息技术应用创新软件适配改造成本评估规范》.pdf
- 中国行业标准 YY/T 1939-2024医疗器械细菌内毒素试验方法 重组C因子法.pdf
- 各类游资炒股心法及感悟,套利模式.pdf
- 【客户管理】龙湖客户细分及工作模式分享精华篇-102p.pptx
- 学校智慧平台管理制度范文.docx VIP
- ASME中国制造-ISO12944-5-2018 中文译稿 第5部分 防护涂料体系.pdf
- 《诫子书》公开课课件(共24张ppt)部编版语文七年级上册.ppt
- 三年级数学下册期中试卷及答案【可打印】.doc
- 关于《佛山市市级财政资金投资建设项目工程概算预算结算.doc
- 二年级上册语文选择题强化练习(一).docx
文档评论(0)