第3章_栈与队列.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 栈和队列 本章主要介绍以下内容: 栈的概念、存储结构及其基本操作 队列的概念、存储结构及其基本操作 栈与队列的应用举例 3.1 栈 3.1.1 栈(stack)的定义 1、 栈的定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈 2、栈的特点:根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。 例2:一个栈的输入序列是12345,若在入栈的过程中允许出栈,则栈的输出序列43512可能实现吗?12345的输出呢? 43512不可能实现,主要是其中的12顺序不能实现; 12345的输出可以实现,只需压入一个立即弹出一个即可。 3.1.2 栈的顺序存储 由于栈是运算受限的线性表,因此线性表的存储结构对栈也适用。 栈的顺序存储结构简称为顺序栈,它是运算受限的线性表。因此,可用一组连续的存储单元(数组)依次存放栈中的每个数据元素来实现顺序栈。因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点,base称为栈底指针,始终指向栈底元素的位置;栈顶位置是随着进栈和退栈操作而变化的, top为栈顶指针,用来指示当前栈顶元素的位置。 栈的顺序存储表示: #define STACK_INIT_SIZE 100 //栈的存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 typedef struct { SElemType *base; //栈底指针,空栈时其值为NULL SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间 }SqStack; 在顺序栈中有“上溢”和“下溢”的概念。 设S是SeqStack类型的指针变量。若栈底位置在向量的低端,即S.base[0]是栈底元素,那么栈顶指针S.top是正向增加的,即进栈时需将S.top加1,退栈时需将S.top 减1。因此,S.top == S.base时表示空栈, S.top - S.base=stacksize-1表示栈满。当栈满时再做进栈运算必定产生空间溢出,简称“上溢”; 当栈空时再做退栈运算也将产生溢出,简称“下溢”。上溢是一种出错状态,应该设法避免之;下溢则可能是正常现象,因为栈在程序中使用时,其初态或终态都是空栈,所以下溢常常用来作为程序控制转移的条件。 基本操作算法: 1. 初始化栈S Status InitStack(SqStack S) { S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } 2. 入栈 — 在栈顶插入新的元素e Status Push(SqStack S,SElemType e) { if (S.top-S.base=S.stacksize) { S.base=(SElemType *)realloc (S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK; } 3、获取栈顶元素 Status GetTop(SqStack S,SElemType e) { if (S.top==S.base) exit(“Stack is empty”); else e=*(S.top-1); return OK; } 4. 出栈

文档评论(0)

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

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

1亿VIP精品文档

相关文档