复杂度分析具体实现(单链表)类定义构造判断非空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}