直接进入主题
就是这样了,如果没有仔细看题的话,请回去再仔细看一下
下面开讲
先讲思路在来代码
首先我们想一下队列的性质,队列是先进先出,而栈是后进先出,所以如果想要用栈实现队列,那么一个栈肯定是不行的,所以我们定义两个栈,我们来看一下,我们可以定义一个入栈一个出栈
就是这样,我们看一下接下来要怎么做,我们目前有两个栈,根据名字,大家也多少猜出来了,所以我们可以这样,一个栈用来入数据,另一个用来出数据
我们看一下
我们如果要入5个数据1 2 3 4 5
那么我们就直接入到Push栈中
看一下
就是这样,那么下面如果我们想要出怎么办?而且出去的顺序还是 按照插入顺序出,就是先入先出,所以我们可以把Push栈中的数据给push到Pop栈中
就是这样所以我们就可以出栈了,那么如果我们还想插入数据怎么做,我们可以继续直接插入到Push栈中
所以我们可以直接插入进去,那么如果我们想出呢?
如果我们的Pop栈不为空的话,那我们就是继续直接出,如果Pop栈为空的话就把Push栈中的数据push到Pop栈就可以继续出
Ok这就是思路,所以我们下面看一下代码
首先我们定义一个自己的queue,这个里面有两个栈,一个Push和Pop
下面在看一下
由于上面的是匿名结构体,所以只能用一次,所以我们需要malloc一个这个类型的结构体
我们malloc出来以后,我们在调用栈初始化函数,初始化里面的两个栈,最后返回就可以了
下面我们看一下如何判断空,如果两个栈都为空,才算是空
下面看一下Push
这个Push就是直接向Push栈里面插入就可以了
主要是Pop
我们看一下Pop,这个Pop的话,就是首先判断是不是为空,如果为空的话,当然是不能Pop的,然后如果我们的Pop栈为空的话,我们就要把Push栈中的数据放到Pop栈中,然后才能Pop,之后就是肯定是有数据的,所以我们记录一下他的Top,然后再Pop掉,就可以了,最后就返回记录的数据
下面看一下Peek,这个就是看队头的数据,这里队头的数据就是Pop栈中的Top数据,所以还是和Pop前面一样,所以我们需要判断Pop栈是否为空,如果为空就是需要转移数据,然后再直接返回Top就可以了
下面在看一下最后的就是释放函数
就是直接释放两个栈里面malloc的空间就可以了
上一篇:JAVA学习笔记(反射)