码迷,mamicode.com
首页 > 其他好文 > 详细

_DataStructure_C_Impl:双端队列

时间:2015-08-06 07:10:43      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:数据结构

//_DataStructure_C_Impl:双端队列
#include<stdio.h>
#include<stdlib.h>
#define QueueSize 8		//定义双端队列的大小
typedef char DataType;
typedef struct DQueue{	//双端队列的类型定义
	DataType queue[QueueSize];
	int end1,end2;		//双端队列的队尾指针
}DQueue;
//将元素e插入到双端队列中。如果成功返回1,否则返回0
int EnterQueue(DQueue *DQ,DataType e,int tag){
	switch(tag){
	case 1:		//1表示在队列的左端入队
		if(DQ->end1!=DQ->end2){		//元素入队之前判断队列是否为满
			DQ->queue[DQ->end1]=e;	//元素e入队
			DQ->end1=(DQ->end1-1)%QueueSize;	//向左移动队列指针
			return 1;
		}else
			return 0;
	case 2:				//2表示在队列的右端入队
		if(DQ->end1!=DQ->end2){
			DQ->queue[DQ->end2]=e;
			DQ->end2=(DQ->end2+1)%QueueSize;	//向右移动队列指针
			return 1;
		}else
			return 0;
	}
	return 0;
}
//将元素出队列,并将出队列的元素赋值给e。如果出队列成功返回1,否则返回0
int DeleteQueue(DQueue *DQ,DataType *e,int tag){
	switch(tag){
	case 1:		//1表示在队列的左端出队
		if(((DQ->end1+1)%QueueSize)!=DQ->end2){		//在元素出队列之前判断队列是否为空
			DQ->end1=(DQ->end1+1)%QueueSize;		//向右移动队列指针,将元素出队列
			*e=DQ->queue[DQ->end1];			//将出队列的元素赋值给e
			return 1;
		}else
			return 0;
	case 2:
		if(((DQ->end2-1)%QueueSize)!=DQ->end1){
			DQ->end2=(DQ->end2-1)%QueueSize;		//向左移动队列指针,将元素出队列
			*e=DQ->queue[DQ->end2];
			return 1;
		}else
			return 0;
	}
	return 0;
}
void main(){
	DQueue Q;			/*定义双端队列Q*/
	char ch;			/*定义字符*/
	Q.end1=3;			/*设置队列的初始状态*/
	Q.end2=4;
	/*将元素a,b,c在队列左端入队*/	
	if(!EnterQueue(&Q,'a',1))			/*元素左端入队*/
		printf("队列已满,不能入队!");
	else
		printf("a左端入队:\n");
	if(!EnterQueue(&Q,'b',1))
		printf("队列已满,不能入队!");
	else
		printf("b左端入队:\n");
	if(!EnterQueue(&Q,'c',1))
		printf("队列已满,不能入队!");
	else
		printf("c左端入队:\n");
	/*将元素d,e在队列右端入队*/
	if(!EnterQueue(&Q,'d',2))			/*元素右端入队*/
		printf("队列已满,不能入队!");
	else
		printf("d右端入队:\n");
	if(!EnterQueue(&Q,'e',2))
		printf("队列已满,不能入队!");
	else
		printf("e右端入队:\n");
	/*元素c,b,e,d依次出队列*/
	printf("队列左端出队一次:");
	DeleteQueue(&Q,&ch,1);				/*元素左端出队列*/
	printf("%c\n",ch);
	printf("队列左端出队一次:");
	DeleteQueue(&Q,&ch,1);
	printf("%c\n",ch);
	printf("队列右端出队一次:");
	DeleteQueue(&Q,&ch,2);				/*元素右端出队列*/
	printf("%c\n",ch);
	printf("队列右端出队一次:");
	DeleteQueue(&Q,&ch,2);
	printf("%c\n",ch);
	system("pause");
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

_DataStructure_C_Impl:双端队列

标签:数据结构

原文地址:http://blog.csdn.net/williamfan21c/article/details/47308845

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!