摘要: 循环队列类似栈,但是有两个口,一个专门用来入队,一个专门用来出队。由于入队出队不在一个端口,因此如果不适用循环队列,随着队列的使用,存储空间马上就被耗光了。在循环队列中,一个主要的知识点,就是如何判断队列为空,或者队列满。这里主要有两个方法:1 设置一个标记位,初始时,队列为空,我们设置flag=0;随着数据的使用,如果队满,设置flag=1;2 使用一个空的数据位,这样rear指针永远也不能追上front指针。当front==rear时,队列即为空;当(rear-front)%SIZE==SIZE时,队列为满数据结构typedef struct Queue{ int data[MAXS... 阅读全文
posted @ 2014-01-27 15:39 xingoo 阅读(3708) 评论(0) 推荐(0)
摘要: 共享栈,即是两个栈使用同一段存储空间。第一个栈从数组头开始存储,第二个栈从数组尾开始,两个栈向中间拓展。当top1+1==top2或者top1==top2-1时,即staock overflow!.与普通栈一样,共享栈出栈入栈的时间复杂度仍为O(1).数据结构typedef struct shareStack{ int data[MAXSIZE]; int top1; int top2;}shareStack;出栈操作该数据,仅存的是非负数,因此如果想要存储更复杂的操作,可以在判断栈空时,换一种方式,即可。int Pop(shareStack *ss,int flag){ ... 阅读全文
posted @ 2014-01-27 12:45 xingoo 阅读(8098) 评论(0) 推荐(1)
摘要: 栈的基本操作就是出栈和入栈,这两个的时间复杂度都是O(1)数据结构typedef struct Stack{ int data[MAXSIZE]; int top;}Stack;出栈操作int Pop(Stack *s){ if(s->top == -1) return 0; s->top--; return s->data[s->top+1];}入栈操作int Push(Stack *s,int num){ if(s->top == MAXSIZE-1) return 0; s->top++; s->data[s->... 阅读全文
posted @ 2014-01-27 11:05 xingoo 阅读(391) 评论(1) 推荐(0)