栈和队列
进出栈的时间复杂度均为O(1)
循环顺序队列中索引都进行加1取余运算保证队首(尾)的索引在最大时进行出入队操作后新索引变为最小索引,构成一个循环。(如此时队尾索引为7,队最大容量为8,插入一个队元素,队尾变为新元素,索引变为(7/1)%8=0)
循环队列为保证判断队空与队满的条件不冲突,损失一个单元不用来更改队满判断条件,所以队首指针一直是指向一个空单元。出入队操作都是顺时针移动指针即可,队列所使用的空间也是队首至队尾顺时针所占空间,默认front指向为空,只要移动队首至所指向处,就默认为空出队
队尾rear插入,队首front删除
链队列中,为了方便运算添加了一个头结点,队首指针指向头节点,所以当队列非一个元素时,队首删除操作不是删除队首指向的元素,而是该元素指向的下一个元素
在循环链队列中存在溢出现象
链队列不同于顺序队列,链队列的首尾指针不同于顺序队列存在于一个结构体,链队列是一个单独的结构体,即顺序队列由一个结构体构成,而链队列由两个。所以顺序队列出入队会改变首尾指针的值,而链队列不会
上述构建对比Java的构建方式,Java对于链队列的构建,是用一个自定义node实例+两个node类分别表示队列数据体和两个端点,相对于c语言本质是一样的,不过是调用了集成的接口实现更简单。
而链栈构建,我正在阅读的教材把头结点省略而将最新的一个栈元素作为栈顶,而Java中是以一个node类指定的栈顶,我个人认为c中加上也跟方便运算,反正也不差那点内存。

浙公网安备 33010602011771号