数据结构03-栈与队列.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》 第三章 栈和队列 第三章 栈和队列 重点: ⑴栈的定义、逻辑特点及基本运算; ⑵栈的顺序存储结构及运算实现; ⑶栈的链式存储结构及入栈、出栈等运算的实现; ⑷队列的定义、逻辑特点及基本运算; ⑸队列的顺序存储结构及其上的运算实现; ⑹队列的链式存储结构及入队、出队等运算的实现。 难点: ⑴顺序栈的溢出判断条件; ⑵循环队列的队空、队满判断条件; ⑶循环队列上的插入、删除操作。 栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性的数据结构。 §3.1 栈(Stack) ★栈的定义和术语: 栈:限定在一端(表尾或表头)进行插入或删除操作的线性表 栈顶:对栈进行输入、输出的一端。用栈顶指针指示其位置。 栈底:不可对栈进行输入、输出的一端。 栈的长度:栈中元素的个数。元素个数为0的栈是空栈。 ★栈的特性: 栈的修改是按后进先出(LIFO)的原则进行的 a1 ... an top Push Pop 栈S=(a1,a2,...,an) 栈顶 栈底 ★栈的基本运算定义: InitStack(S) //构造一个空栈S DestroyStack(S) //销毁栈S ClearStack(S) //清空栈S StackEmpty(S) //判断S是否空栈 StackLength(S) //求栈S的长度 GetTop(S,e) //返回S栈顶元素的值给e Push(S,e) //把e压入栈 Pop(S,e) //出栈,并赋值给e StackTraverse(S) //遍历,从栈底到栈顶 ★栈的顺序存储结构(顺序栈): #define STACK_MAX_SIZE 100 typedef struct{ ElemType elem[STACK_MAX_SIZE]; int top; }SqStack; 静态分配空间 #define STACK_INIT_SIZE 10 #define STACKINCREMENT 5 typedef struct{ ElemType *base,*top; int stacksize; }SqStack; 动态分配空间 . . . top base 下标 9 . . . 0 Status InitStack(SqStack *S){ //★动态分配空间(malloc),并赋值给栈底指针(S-base) //如果地址为空(NULL),分配失败,返回内存溢出 //★初始化栈顶指针指向栈底(空栈) (S-top=S-base) //赋值栈大小(stacksize)为初始大小(STACK_INIT_SIZE) //返回成功 } 示例代码 入栈操作 . . . top base Status Push(SqStack *S,ElemType e){ //如果栈不存在(S-base==NULL),返回错误 //如果满栈(S-top==S-base+ S-stacksize),追加空间,并重新定位栈顶指针S-top=S-base+S-stacksize //★赋值栈顶指针所指元素(*(S-top)=e) //★上移栈顶指针((S-top)++) //返回成功 } e 出栈操作 Status Pop(SqStack *S,ElemType *e){ //如果栈不存在(S-base==NULL),或空栈 (S-top==S-base),返回错误 //★下移栈顶指针((S-top)--) //★赋值e为栈顶指针所指元素(*e=*(S-top)) //返回成功 } ★栈的链式存储结构(链栈): // │ an │ an-1│ ... a1 │^ 头指针S 头结点H //│^ S 空栈 H 栈顶 栈底 typedef struct SNode{ ElemType data; struct SNode *next; }SNode,*LinkStack; Status InitStack(LinkStack *S){ //★动态分配空间(malloc),并赋值给临时栈头指针St //如果地址为空(NULL),分配失败,返回内存溢出 //★初始化栈顶指针(头结点指针域)为空St-next=NULL //赋值St给*S(*S=St),返回成功 } ★入栈、出栈操作参见链表的插入与删除第一个元素的操作 示例代码 §3.2 栈的应用举例 ★数制转换: void conversion(int number,int system){ //如果进制数不在2~16之间,提示错误并返回 //如果初始化链栈失败,返回 //初始化进制数组shu[16]={’0’,..’9’,’A’...’F’} //如果number是负数,取反,并输出’-’号 //

文档评论(0)

js1180 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档