简单数据结构之队列模拟

/************************************************************************************** 
* Function     : 模拟队列
* Create Date  : 2014/04/23
* Author       : NTSK13 
* Email        : [email protected] 
* Copyright    : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。 
*                任何单位和个人不经本人允许不得用于商业用途 
* Version      : V0.1                    
***************************************************************************************
题目:简单数据结构之队列模拟
     
**************************************************************************************/  
#include<stdio.h>  
            
#define MY_FUNC  1
#if MY_FUNC  

#define M 10 //队列最大长度

typedef struct queue
{
	int data[M];
	int len;//队列当前长度
}Queue;

int sample[M];
int result[M];

void init_queue(Queue *a);//队列初始化
int in_queue(Queue *a,int value);//进队
int out_queue(Queue *a);//出队
int get_head_element(Queue *a);//获取队首的元素

// The first method:
int main()  
{  
    int i=0;
    Queue sq;
    init_queue(&sq);

	freopen("input.txt","r",stdin);

	for(i=0;i<M;i++) 
    	scanf("%d",&sample[i]);  // get input data
	out_queue(&sq);
	get_head_element(&sq);
           
	for(i=0;i<M;i++)
		in_queue(&sq,sample[i]);
	in_queue(&sq,100);

	for(i=0;i<M;i++)
		result[i]=out_queue(&sq);

	for(i=0;i<M;i++)
	{
		printf("%d\t",result[i]);
		fflush(stdout);//修复Eclipse printf()不能显示的小bug
	}

	printf("\n");
	fflush(stdout);

    return (0);
}  

void init_queue(Queue *a)//队列初始化
{
	(*a).len=0;
}
//该种情况,进队效率太低
int in_queue(Queue *a,int value)//进队
{
	int i=0;
	if( (*a).len==M)
	{
		printf("Queue is full ,can not  in !!!\n");
		fflush(stdout);
		return (-1);
	}else{
		if((*a).len==0)
		{
			(*a).data[0]=value;
			(*a).len++;
			return (1);
		}else
		{
			for(i=(*a).len;i>0;i--)
			{
				(*a).data[i]=(*a).data[i-1];
			}
			(*a).data[0]=value;
			(*a).len++;
			return (1);
		}
	}
}
int out_queue(Queue *a)
{
	int tmp=0;
	if((*a).len==0)
	{
		printf("Queue is empty ,can not out !!!\n");
		fflush(stdout);
		return (-1);
	}else{
		tmp=(*a).len-1;
		(*a).len--;
		return ( (*a).data[tmp]);
	}
}
int get_head_element(Queue *a)
{
	if( (*a).len==0)
	{
		printf("Queue is empty full ,can not get !!!\n");
		fflush(stdout);
		return (-1);
	}else{
		return ( (*a).data[ (*a).len -1]);
	}
}
    
/********************************************my function end**************************************************/  
#else  


#define M 10 //队列最大长度

typedef struct queue
{
	int data[2*M-1];//队列最长为M
    int head;
    int tail;
	int len;//队列当前长度
}Queue;

int sample[M];
int result[M];

void init_queue(Queue *a);//队列初始化
int in_queue(Queue *a,int value);//进队
int out_queue(Queue *a);//出队
int get_head_element(Queue *a);//获取队首的元素

// The second method:    
int main()  
{         
    int i=0;
    Queue sq;
    init_queue(&sq);

	freopen("input.txt","r",stdin);

	for(i=0;i<M;i++)
    	scanf("%d",&sample[i]);  // get input data
	out_queue(&sq);
	get_head_element(&sq);

	for(i=0;i<M;i++)
		in_queue(&sq,sample[i]);
	in_queue(&sq,100);

	for(i=0;i<M;i++)
		result[i]=out_queue(&sq);

	for(i=0;i<M;i++)
	{
		printf("%d\t",result[i]);
		fflush(stdout);//修复Eclipse printf()不能显示的小bug
	}

	printf("\n");
	fflush(stdout);

    return (0);
}


void init_queue(Queue *a)
{
	(*a).len=0;
}

//这种方法 避免了 for 循环
int in_queue(Queue *a,int value)//进队
{
	if( (*a).len==M)
	{
		printf("Queue is full ,can not  in !!!\n");
		fflush(stdout);
		return (-1);
	}else{
		if((*a).len==0)
		{
			(*a).data[M]=value;
			(*a).len++;
			(*a).head=M;
			(*a).tail=M;
			return (1);
		}else
		{
			if( (*a).tail ==0 )
				(*a).tail=2*M-2;
			else
				(*a).tail--;

			(*a).data[ (*a).tail]=value;
			(*a).len++;
			return (1);
		}
	}
}
int out_queue(Queue *a)
{
	int tmp=0;
	if((*a).len==0)
	{
		printf("Queue is empty ,can not out !!!\n");
		fflush(stdout);
		return (-1);
	}else{
		tmp=(*a).head;
		if((*a).head==0)
			(*a).head=2*M-2;
		else
			(*a).head--;
		(*a).len--;
		return ( (*a).data[tmp]);
	}
}
int get_head_element(Queue *a)
{
	if( (*a).len==0)
	{
		printf("Queue is empty full ,can not get !!!\n");
		fflush(stdout);
		return (-1);
	}else{
		return ( (*a).data[ (*a).head ]);
	}
}

#endif  


你可能感兴趣的:(简单数据结构之队列模拟)