C语言实现栈(push pop empty top destroy等)

栈是数据结构中很重要的一个结构,可以代替复杂的递归,所以他很重要~

这里主要讲的是如何实现,而是不是他用来做什么

栈是一个先进后出的结构,所以他只有一个口,这里即是插入的地方也是弹出的地方

C语言实现栈(push pop empty top destroy等)_第1张图片

 

 

下面我们来看一下他如何实现

首先我们看一下他的结构

C语言实现栈(push pop empty top destroy等)_第2张图片

他里面有一个datatype类型的指针,指向a,还有一个size和capacity

下面我们看一下他至少需要实现哪些函数

C语言实现栈(push pop empty top destroy等)_第3张图片 

我们暂时先实现这些函数

首先我们看一下初始化

C语言实现栈(push pop empty top destroy等)_第4张图片 

我们初始化首先我们需要开辟一段空间用来存储数据,所以我们暂时把存储的数据量定为4个datatype类型,所以这里我们的size给成0,而这里的最大容量capacity成了4 因为这里现在最大可以存储4个数据

下面我们看一下push

 C语言实现栈(push pop empty top destroy等)_第5张图片

其实这里并不难, 我们前面实现过顺序表,所以我们也是在插入的时候需要判断size是否和capacity相等,相等的话就扩容,扩容也是和顺序表一模一样的,这里有不懂的可以看一下顺序表。

下面我们在看一下pop

C语言实现栈(push pop empty top destroy等)_第6张图片

我们在删除的时候,当然要从栈顶位置开始删除,所以我们这里需要判断一下栈是否为空empty,如果为空的话则不能删除,否则就可以删除,而这里的删除也只需要把size-- 就可以了。

下面我们看一下判断是否为空

C语言实现栈(push pop empty top destroy等)_第7张图片 

这个判断是否为空确实也特别简单,如果size为0就返回true反之则返回 false

这里使用了三目运算符

下面我们看一下size就是当前栈有多少数据元素,只需要返回size就可以了

C语言实现栈(push pop empty top destroy等)_第8张图片

 下面我们看一下top取栈顶元素

C语言实现栈(push pop empty top destroy等)_第9张图片

这个也挺简单的,如果为空则不能取

否则就返回size-1位置的元素

下面我们看一下销毁函数

C语言实现栈(push pop empty top destroy等)_第10张图片 

这个如果a为空的话就不能销毁,否则就free掉a然后把capacity和size置为0即可

 

这个栈是很简单的,如果有不懂的可以看一下顺序表的实现,他们是特别相似的 

你可能感兴趣的:(c语言,算法,c++,数据结构,数据结构)