- 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;*队列应用 ;划分无冲突子集算法描述;;;括号
您可能关注的文档
最近下载
- 网络预约出租汽车企业安全生产责任制和事故报告制度.pptx
- SY-T 5051-2009 钻具稳定器-石油天然气行业标准.pdf VIP
- 22G101-3 混凝土结构施工图平面整体表示方法制图规则和构造详图(独立基础、条形基础、筏形基础、桩基础).docx
- 模板支架验收记录表.doc
- 标准个人租房合同模板.pdf VIP
- 2024年全国疾控系统大学习实验室质量控制规范答案.docx VIP
- 2024-2025学年初中道德与法治七年级(全一册)统编版(五四学制)(2024)教学设计合集.docx
- 小学劳动教育五年级下册第五单元2《维修凳子》教学设计.docx
- 北师大版五年级数学上册第五单元《分数的意义》(大单元教学设计).docx VIP
- 简易呼吸球囊.ppt
文档评论(0)