线性结构

线性结构

复杂度分析具体实现(单链表)类定义构造判断非空Push & Pop删除栈是一种后进先出(Last in First out, LIFO)的数据结构。栈的常用实现方式:一是数组,二是单链表。使用数组的优点是操作较快,但空间有限;使用单链表有无限空间,但开销较高。栈的核心功能就是Push和Pop。

复杂度分析插入1个元素:删除1个元素:

具体实现(单链表)这里还是用带dummy header的单链表。示意图如图所示,其中箭头方向是单链表方向。栈底元素指向NULL。

类定义

PS: 要转成面向对象的形式也很简单,比如像Python的类里面定义的函数如__init__()会带有一个self参数,这里就把Head当成那个self就容易理解了。

这里Head是一个dummy header,Head->next就是指向栈顶的指针。

typedef LinkedList Stack;Stack CreateStack();Stack DeleteStack();bool IsEmpty(Stack Head);void Push(Stack Head, DataType Data);DataType Pop(Stack Head);

构造CreateStack() { Head = 新的LinkedList节点; Head->next = NULL; return Head;}

判断非空判断非空比较容易。由于Head是dummy header,只要看Head下一个是不是NULL。

IsEmpty(Head) { return (Head->next != NULL);}

Push & PopPush 和 Pop 就相当于单链表插入删除元素。

Push(Head, Data) { 在Head后插入Data, 具体实现参考单链表;}

Pop(Head) { if (IsEmpty(Head)) { 没有元素,不输出; } else { 返回Head后节点的值,并从栈中删除该节点。 }}

删除//注意,这个方法稍微改一下就可以变成清空栈。DeleteStack(Head) { //Pop直到只剩下DummyHeader while (!IsEmpty(Head)) { Pop(Head); } 删除Head}

相关推荐

如何在安卓智能手机上截图
《CF》气锤怎么样,气锤武器简评,cf气锤原型
贪婪蛋糕 (Endless Cake) - 无尽贪婪:重生 (Re:Avaritia) - MC百科