zoukankan      html  css  js  c++  java
  • 队列——链表实现

    引言:

       

           队列与栈的差别是队列是先进先出的数据结构。

    为了使得出入队列easy。能够引入队列头指针和队列尾指针。


    分析描写叙述:


           队列的结点结构。

    typedef int QElemType;
    typedef struct QNode{
    	QElemType	data;
    	struct QNode *next;
    }QNode, *QueuePtr;
    
    typedef struct{
    	QueuePtr	front;//队列的头指针
    	QueuePtr	rear;//队列的尾指针
    }LinkQueue;
    LinkQueue Q;

            队列的初始化。

    LinkQueue  InitQueue(LinkQueue *Q)
    {
    	QueuePtr  tmp;
    	tmp = (QueuePtr)malloc(sizeof(QNode));
    	if(tmp == NULL){
    		printf("create queue error.
    ");
    		return ;
    	}
    	Q->front = tmp;
    	Q->rear = Q->front;
    	Q->front->next = NULL;
    
    	return *Q;
    }

             入队列操作。

    void EnQueue(LinkQueue *Q, QElemType e)
    {
    	QueuePtr	tmp;
    	tmp = (QueuePtr)malloc(sizeof(QNode));
    	if(tmp == NULL){
    		printf("create queue error.
    ");	
    		return ;
    	}
    	tmp->data = e;
    	tmp->next = NULL;
    	Q->rear->next = tmp;
    	Q->rear = tmp;
    
    	return;
    }

            出队列操作。

    void DeQueue(LinkQueue *Q, QElemType *e)
    {
    	QueuePtr tmp;
    	if(Q->front == Q->rear){
    		printf("the queue is empty.
    ");	
    		return ;
    	}
    	tmp = Q->front->next;
    	*e = tmp->data;
    	Q->front->next = tmp->next;
    	if(Q->rear == tmp)
    		Q->rear = Q->front;
    	free(tmp);
    	return;
    }

            取队列的头元素。

    void GetHead(LinkQueue *Q, QElemType *e)
    {
    	if(Q->front == Q->rear)
    		return;
    	*e = Q->front->next->data;
    	return ;
    }

              推断队列是否为空。

    int QueueEmpty(LinkQueue *Q)
    {
    	if(Q->front == Q->rear)
    		return TRUE;
    	return FALSE;
    }

             清空队列。

    void ClearQueue(LinkQueue *Q)
    {
    	if(Q->front == Q->rear){
    		printf("the queue is empty.
    ");
    		return;
    	}
    
    	while(Q->front->next){
    		Q->rear = Q->front->next->next;
    		free(Q->front->next);	
    		Q->front = Q->front->next;
    	}
    	Q->front->next = NULL;
    	Q->rear = Q->front;
    	return;
    }

             求队列的长度。

    int QueueLength(LinkQueue Q)
    {
    	int length = 0;
    	LinkQueue Tmp= Q。
    
    	while(Tmp.front != Tmp.rear){
    		length++;
    		Tmp.front = Tmp.front->next;	
    	}
    
    	return length - 1;
    }


  • 相关阅读:
    vue 实现表格导出Excel
    基于canvas绘制的,Vue 图形验证码组件
    screenfull.js实现全屏功能
    学习笔记-Python基础2-表达式和运算符
    PHP里对数据库增删改查操作
    学习笔记-Python基础1-变量命名和声明、数据类型
    PHP类中的$this、self、parent关键字使用总结
    移动端页面中,有时需要禁止用户滑动屏幕
    正则表达式总结
    input输入框限制各类输入总结
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6852143.html
Copyright © 2011-2022 走看看