• _DataStructure_C_Impl:双端队列


    //_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左端入队:
    ");
    	if(!EnterQueue(&Q,'b',1))
    		printf("队列已满,不能入队!");
    	else
    		printf("b左端入队:
    ");
    	if(!EnterQueue(&Q,'c',1))
    		printf("队列已满,不能入队!");
    	else
    		printf("c左端入队:
    ");
    	/*将元素d,e在队列右端入队*/
    	if(!EnterQueue(&Q,'d',2))			/*元素右端入队*/
    		printf("队列已满,不能入队!");
    	else
    		printf("d右端入队:
    ");
    	if(!EnterQueue(&Q,'e',2))
    		printf("队列已满,不能入队!");
    	else
    		printf("e右端入队:
    ");
    	/*元素c,b,e,d依次出队列*/
    	printf("队列左端出队一次:");
    	DeleteQueue(&Q,&ch,1);				/*元素左端出队列*/
    	printf("%c
    ",ch);
    	printf("队列左端出队一次:");
    	DeleteQueue(&Q,&ch,1);
    	printf("%c
    ",ch);
    	printf("队列右端出队一次:");
    	DeleteQueue(&Q,&ch,2);				/*元素右端出队列*/
    	printf("%c
    ",ch);
    	printf("队列右端出队一次:");
    	DeleteQueue(&Q,&ch,2);
    	printf("%c
    ",ch);
    	system("pause");
    }

  • 相关阅读:
    VScode出现无法打开“X”: 找不到文件(file:///XXXX) 的解决办法
    Re:0通过服务器自建内网穿透远程桌面(10分钟可完成)
    (补题 POJ 3013) Big Christmas Tree
    (补题 cf 1140)Detective Book
    (2019.9.5~2019.9.11)补题汇总(字符串相关)
    最小生成树(克鲁斯卡尔算法)
    最短路问题
    字符串匹配(部分整理)
    Linux内核分析——第八周学习笔记
    《Linux内核设计与实现》第四章读书笔记
  • 原文地址:https://www.cnblogs.com/javafly/p/6037150.html
Copyright © 2020-2023  润新知