03 栈和队列d.pptVIP

  • 2
  • 0
  • 约1.36万字
  • 约 88页
  • 2018-03-03 发布于河南
  • 举报
03 栈和队列d

Example Show the result of the following operations on a queue Q. enqueue (Q , 23) if not empty (Q), dequeue (Q) enqueue (Q , 20) enqueue (Q , 19) if not empty (Q), dequeue (Q) 链队基本操作的实现 int InitQueue(LinkQueue *Q) { Q-front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode)); if(Q-front!=NULL) ??? { Q-rear=Q-front; ????? Q-front-next=NULL; ??????return(TRUE); ?????} ? else? return(FALSE);?/*溢出*/ } InitQueue Enqueue Dequeue 链队基本操作的实现 int Enqueue(LinkQueue *Q, QueueElementType x) {LinkQueueNode? * NewNode; NewNode=(LinkQueueNode * )malloc(sizeof(LinkQueueNode)); if(NewNode!=NULL) {NewNode-data=x; ?? NewNode-next=NULL; ?? Q-rear-next=NewNode; ? ?Q-rear=NewNode; return(TRUE); } else? return(FALSE);?/*溢出*/ } InitQueue Enqueue Dequeue 链队基本操作的实现 int DeleteQueue(LinkQueue * Q, QueueElementType *x) {LinkQueueNode * p; if(Q-front==Q-rear) return(FALSE); p=Q-front-next; Q-front-next=p-next;? /*队头元素p出队*/ /* 如果队中只有一个元素p,则p出队后成为空队*/ if(Q-rear==p) Q-rear=Q-front;? *x=p-data; free(p);?? /*释放存储空间*/ return(TRUE);????? } InitQueue Enqueue Dequeue 循环队列 循环队列是队列的一种顺序表示和实现方法。 与顺序栈类似,在队列的顺序存储结构中,我们用一组地址连续的存储单元依次存放从队头到队尾的元素,如一维数组Queue[MAXSIZE]。 由于队列中队头和队尾的位置都是动态变化的,因此需要附设两个指针front和rear,分别指示队头元素和队尾元素在数组中的位置。 循环队列 假溢出 由于只能在队尾入队,使得随着部分元素的出队,数组前面会出现的一些空单元无法使用的现象。 真正队满的条件是rear - front=MAXSIZE。 为了解决假溢出现象并使得队列空间得到充分利用,一个较巧妙的办法是将顺序队列的数组看成一个环状的空间,即规定最后一个单元的后继为第一个单元,我们形象地称之为循环队列。 循环队列 EMPTY QUEUE How to test when queue is empty? [2] [3] [2] [3] [1] [4] [1] [4] [0] [5] [0] [5] front = 0 front = 0 rear = 0 rear = 3 J2 J1 J3 循环队列 How to test when queue is full? [2] [3] [2] [3] [1]

文档评论(0)

1亿VIP精品文档

相关文档