实话说,其实从高中开始学信息奥赛时开始,一直重点都是学习算法以及思想,根本没怎么理会数据结构,因为除了了树结构,其它的结构都可以笼统归到方法思想这一类,所以从来遇到问题,都是想用什么什么方法,然后这方法后来才发现原来叫“栈”“队列”。
也就是说,接触到的问题的解决方案里,从来都是用到了它们的思想,并且是它们的变种,根本没有学习过什么是最简单的“栈”“队列”。由于用到的都是自创的变种,也导致算法复杂度上可以说是五花八门,毕竟根据实际需求,自己扩增一些属性,从而可以优化复杂度,当然,代价就是占用存储量增加。
结果,最近面试总是被问到最简单的“栈”“队列”,然后就懵了,平常谁管这是“栈”“队列”啊,都是根据实际情况,直接写个变种啊。
不得不还是好好想想最简单的队列与栈应该是怎么的,毕竟还是要应付面试...
“栈”的思想是后进先出,也就是说为了实现这个思想,最少的要素是什么?
class myele
{
myele *ptr_father_ = NULL;
};
class mystack
{
myele *ptr_current_= NULL ;
};
也就是说 每个元素ele只要有一个指向前面ele的指针ptr_father_, 以及数据结构mystack中只要保存当前栈末尾的指针ptr_current_,然后再写些操作函数,就能实现栈的最基本功能,也就是说上面列出来的就是最基本的 栈,以后栈的各种操作复杂度,用这个来分析即可。
至于队列,思想为“先进先出”,那么最少的要素为:
class myele
{
myele *ptr_next_ = NULL;
};
class myqueue
{
myele *ptr_head_ = NULL;
myele *ptr_current_= NULL ;
};
也就是说 每个元素ele只要有一个指向后面的ele的指针ptr_next_, 以及数据结构myqueue中只要保存当前队列末尾的指针ptr_current_以及队列头指针ptr_head_。
然后再写些操作函数,就能实现队列的最基本功能,也就是说上面列出来的就是最基本的 队列,以后队列的各种操作复杂度,用这个来分析即可。
好了,这样就舒坦多了,以后叫我分析栈与队列都按照前面最基本元素进行分析。免得每次我都没头绪,到底栈,队列里哪些指针有,哪些指针没有...