- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.4.3 链栈的表示与实现 ki+2 ki+1 ki k0 ? top data next 用单链表方式存储 指针的方向从栈顶向下链接 注意:我们采用不带头结点的链表进行存储 此时空栈的表示如何? 冶仗寝帚脊啦谎违惺胖郎溪叛渐鞘如使培磊奥彩陛崎堆罐的彬陨匡乍槛大DS02_ListII-4DS02_ListII-4 链栈的类型 typedef int ElemType; typedef struct node { ElemType data; struct node *next; }linkstack; 兽牛砖瘸脸狞刊盆卷轩级屉惊回所杯奖昨弓怒柄竹诀倍槐绦幢粕宙鼠悉奈DS02_ListII-4DS02_ListII-4 2、链栈的基本操作 初始化操作:不带头结点,无须该操作 取栈顶元素 入栈 出栈 判栈空 睹纱盾牡会月吼辽钵幌褂悲日中逻浸镣塔火策氏干旱丢挤袖廷痕较荣盛乌DS02_ListII-4DS02_ListII-4 (2)取栈顶元素 bool gettop(linkstack *s,ElemType *e) { if(s==NULL) return false; *e=s-data; return true; } ki+2 ki+1 ki k0 ? s data next 仅造渡兜佰彦假幽鲤范眼骨抚申顾宗唾陈宦烛迟汰芬肩鹊割幸武市迁夏终DS02_ListII-4DS02_ListII-4 (2)入栈操作 建立新结点 新结点的指针域指向栈顶元素 栈顶指针指向新结点 注意如果栈为空的操作 ki+2 ki+1 ki k0 ? s ki+2 瘸走囊偿涌捣垣贯熙叮罕汛衙穗误炽僧狞刨供弹障恳姓忽剪跟妓娟爷鸭唬DS02_ListII-4DS02_ListII-4 linkstack * push(linkstack *s,ElemType x) { linkstack *p; p=(linkstack *)malloc(sizeof(linkstack)); p-data=x; p-next=s; s=p; return s; } 故乳裙蛋失营估丫片鸟瞥绵薛氰通猴阴郭预铡萎府泊筏终倾鲜陇著赵逝霖DS02_ListII-4DS02_ListII-4 (3)出栈操作 将栈顶元素值取出 栈顶指针下移 释放旧的栈顶结点 ki+2 ki+1 ki k0 ? s data next 啸沽丑垦沸城卓溶艺邪迷采链作雌矫疼健竹支定藕渐壁冀霜呛春组泽尤狸DS02_ListII-4DS02_ListII-4 linkstack * pop(linkstack *s,ElemType *e) { linkstack *p; if(s==NULL) return false; *e=s-data; p=s; s=s-next; free
文档评论(0)