zoukankan      html  css  js  c++  java
  • 数据结构之环形队列

    数据结构之环形队列

    #include <stdio.h>
    #include <stdlib.h>
    typedef char ElemType;
    typedef struct qnode
    {	
    	ElemType data;
    	struct qnode *next;
    } DataNode;	
    typedef struct		
    {	
    	DataNode *front;
    	DataNode *rear;
    } LinkQuNode;			
    void InitQueue(LinkQuNode *&q)
    {	
    	q=(LinkQuNode *)malloc(sizeof(LinkQuNode));
    	q->front=q->rear=NULL;
    }
    void DestroyQueue(LinkQuNode *&q)
    {
    	DataNode *pre=q->front,*p;//pre指向队首结点 
    	if (p!=NULL)		//p指向结点pre的后继结点 
    	{	p=pre->next;
    		while (p!=NULL)//p不空循环 
    		{	free(pre);//释放pre结点 
    			pre=p;p=p->next;//pre,p同步后移 
    		}
    	}
    	free(pre);//释放最后一个结点 
    	free(q);	//释放	lian'dui		
    } 
    bool QueueEmpty(LinkQuNode *q)
    {
    	return(q->rear==NULL);
    }
    void enQueue(LinkQuNode *&q,ElemType e)
    {	DataNode *p;
    	p=(DataNode *)malloc(sizeof(DataNode));//创建新结点 
    	p->data=e;
    	p->next=NULL;
    	if (q->rear==NULL)		//若链队为空,则新结点是队首结点又是队尾结点
    		q->front=q->rear=p;
    	else
    	{	q->rear->next=p;	//将p结点链到队尾,并将rear指向它
    		q->rear=p;
    	}
    }
    bool deQueue(LinkQuNode *&q/*,ElemType &e*/)
    {	DataNode *t;
    	if (q->rear==NULL)		//队列为空
    		return false;
    	t=q->front;				//t指向第一个数据结点
    	if (q->front==q->rear)  //队列中只有一个结点时
    		q->front=q->rear=NULL;
    	else					//队列中有多个结点时
    		q->front=q->front->next;
    	printf("%c
    ",t->data); 
    	//e=t->data;
    	free(t);
    	return true;
    }
    int main()
    {
    	LinkQuNode *q;
    
        InitQueue(q);
        printf("初始化完毕
    ");
        if(QueueEmpty(q))
        {
        	printf("链队为空
    "); 
    	}
    	else
    	{
    		printf("链队不为空
    "); 
    	}
    	enQueue(q,'a');
    	enQueue(q,'b');
    	enQueue(q,'c');
    	printf("进队完毕
    "); 
    	deQueue(q);
    	printf("a已经出队
    "); 
    	enQueue(q,'d');
    	enQueue(q,'e');
    	enQueue(q,'f');
    	deQueue(q);
    	deQueue(q);
    	deQueue(q);
    	deQueue(q);
    	deQueue(q);
    	DestroyQueue(q);
    	return 0;   
     } 
    
  • 相关阅读:
    我的C编码风格
    状态机
    git提交版本-git基础(七)
    git查看修改内容-git基础(六)
    git忽略文件-git基础(五)
    git追踪文件对文件进行版本控制-git基础(四)
    git创建或获取仓库-git基础 (三)
    git 名词解释和常用术语(二)
    什么是git,为什么要用git(一)
    帝国cms7.5免登陆发布模块
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832343.html
Copyright © 2011-2022 走看看