栈的解读

image

前沿

栈普遍应用在各类软件系统中,因此这块的知识点咱们也要好好掌握起来。算法

定义

(stack)是限定仅在表尾进行插入或删除操做的线性表。数组

简单的来讲就是一种能够实现"先进后出" 的存储结构spa

栈相似于箱子指针

分类

栈通常分为两类code

  • 静态栈 (相似于用数组实现)
  • 动态栈 (相似于用链表实现)

算法

这边咱们来看看 栈的出栈 和入栈的伪算法blog

先来看看入栈内存

image

//伪代码
void push(struct Stack *pS, int val)
{
    struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));
    pNew->data = val;
    pNew->pNext = pS->pTop; 
    pS->pTop = pNew;
    return;
}
  1. 首先初始化的时候 pTop 和 pBottom 都指向空
  2. 而后咱们建立一个节点 pNew, 让他指向下一个节点的指针域。这里咱们要注意,这里应该指向的是 pTop所指向的指针域
  3. 最后把 pNew 赋值给 pTop, 完成pTop 指向新的节点。

再来看看出栈 写法it

image

//伪代码
bool pop(struct Stack *pS, int * pVal)
{    
        struct Node * q = pS->pTop;
        *pVal = q->data;
        pS->pTop = q->pNext;
        free(q);
        q = NULL;
        return true;    
}
  1. 出栈算法看过去时简单的,但有点要特别注意,就是要记得释放内存,避免野指针
  2. 因此咱们定义一个 指针变量 q 来作临时存储使用。
  3. 最后咱们在free()释放内存

致谢

感谢你看完这篇文章,有什么不对的地方欢迎指出,谢谢🙏class

相关文章
相关标签/搜索