- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SIE. BIT 多栈共享空间问题 考虑多栈共享一个大的内存空间,要解决相应产生的问题。 设将多个堆栈顺序地映射到一个已知大小为m的存储空间STACK[m]上。 SIE. BIT 多栈共享空间问题 1、 两个堆栈共享该存储空间:第一个栈底位于STACK[0],另一个栈底位于STACK [m-1]。使用时两栈各自向中间伸展,仅当两个栈顶指针相遇(S1. top == S2. top)时才发生上溢。 a S1[0] b S1[1] c S1[2] 4 S2[3] 3 S2[2] 2 S2[1] 1 S2[0] STACK[0] STACK[m-1] S1.top S2.top SIE. BIT 2、两个以上堆栈共享该存储空间(大小为m): 将m个存储空间平均分配给n个栈,每个栈的存储空间为m/n。 设top[n]为n个堆栈的栈顶指针集合,top[i]为第i个堆栈的栈顶指针,bot[i]为第i个堆栈的栈底指针。另设bot[n+1]为n+1个栈底指针集合。其中第n+1个堆栈是虚设的,目的是为了检测第n个栈栈满与否。 多栈共享空间问题 SIE. BIT 初始时, bot[i]=top[i]=i*(m/n) (0=i=n-1) bot[n]=m 当m=15,n=5时: 各元素陆续进栈后: 0 3 6 9 12 15 m-1 bot[0] top[0] bot[1] top[1] bot[2] top[2] bot[3] top[3] bot[4] top[4] bot[5] a b c 1 d1 d2 gg 0 3 6 9 12 15 m-1 bot[0] top[1] bot[2] bot[3] top[3] bot[4] bot[5] top[4] top[2] bot[1] top[0] SIE. BIT 第i个堆栈“栈空”的条件是 top[i]==bot[i],(0=i=n-1) 第i个堆栈“栈满”的条件是 top[i]==bot[i+1] (0=i=n-1) 多栈共享空间经过扩展,还可以节省空间,但往往要移动大量的数据元素。 SIE. BIT 链式栈的定义 链式栈类的定义 链栈中典型成员函数的实现 链式栈 SIE. BIT 链式栈的定义 链式栈就是用一个线性链表来实现一个堆栈结构。栈中每个元素用一个链结点表示,同时,设置一个指针变量,指出当前栈顶元素所在结点的存储位置,当栈为空时,有top==NULL,下图就是链接栈的一般形式: 不带头节点的链表 SIE. BIT 链栈的特点 链表的第一个结点就是栈顶元素的结点; 根据堆栈的定义,新结点的插入和栈顶结点的删除都在表头进行 ; 插入一个新元素,相当于在第一个结点之前插入一个新结点; 删除链接栈的栈顶元素,就是删除链表的第一个结点。 不会有栈满而产生溢出的问题。 SIE. BIT 链式栈类的定义 定义一个结点结构: templateclass type struct StackNode //定义一个结点模板-结构 { type data; //结点的数据元素值 StackNode *next; //指向下一结点的指针 }; SIE. BIT 链式栈类的定义:链栈模板 templateclass type //定义一个栈类模板 class LinkStack: public abstacktype { protected: StackNodetype*top; //栈顶指针 //复制函数,将堆栈g复制给本链式栈 LinkStack Copy(LinkStack g); public: LinkStack( ); //无参构造函数 LinkStack(LinkStack g) //拷贝构造函数 { top=NULL; Copy(g); } SIE. BIT ~ LinkStack( ) //析构函数,调用Clear( )函数释放内存空间 { Clear( ); } void Clear( ); //清空当前栈中元素 void Push(type x); //进栈函数 bool Pop(type x); //出栈函数 //重载赋值运算符,用于同类型栈对象的赋值 LinkStack operator=(LinkStack g) { Copy(g); r
文档评论(0)