前沿

栈广泛应用在各种软件系统中,所以这块的知识点咱们也要好好把握起来。

定义

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

简略的来说就是一种能够实现"先进后出" 的存储构造

栈相似于箱子

分类

栈个别分为两类

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

算法

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

先来看看入栈

//伪代码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 指向新的节点。

再来看看出栈 写法

//伪代码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()开释内存

致谢

感激你看完这篇文章,有什么不对的中央欢送指出,谢谢????