第十章:基本数据结构(0)

10.1-6  说明如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。

Stack  A,B  //A用于插入,B用于删除

ENQUEUE(Q,x)

if top[A]==n

  then error "upflow"

  else  top[A]=top[A]+1

     A[top[A]] <- x

 

DEQUEUE(Q,x)

if STACK-EMPTY(B)

  if STACK-EMPTY(A)

     error "underflow"

   else  

    while top[A]!=0

      PUSH(B,POP(A))

     POP(B)

else

  POP(B)

#include <iostream>
#include <string>
#include "stack.h"

using namespace std;

#define    STACK_SIZE	20
#define    QUEUE_SIZE	50

struct Stack{
	int count;
	int list[STACK_SIZE];
};

struct Queue{
	int head,tail;
	int list[QUEUE_SIZE];
};

void push(Stack *s,int x){
	if (s->count!=STACK_SIZE){
		s->list[(s->count)++]=x;
	}else{
		cout<<"upflow"<<endl;
	}
}

int pop(Stack *s){
	if (s->	count!=0){
		return s->list[--(s->count)];
	}else{
		cout<<"underflow"<<endl;
		return NULL;
	}
}

bool empty_stack(Stack *s){
	return s->count==0? true:false;
}

void enqueue(Stack *s1,Stack *s2,int x){
	if (s1->count==STACK_SIZE){
		cout<<"upflow"<<endl;
		return ;
	}else{
		push(s1,x);
	}
}

int dequeue(Stack *s1,Stack *s2){
	if (empty_stack(s2)){
		while (s1->count!=0){
			push(s2,pop(s1));
		}
		return pop(s2);
	}else{
		return pop(s2);
	}
}

  

 

  

posted @ 2013-06-19 10:33  雨夜听声  阅读(200)  评论(0编辑  收藏  举报