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;
    }


  • 相关阅读:
    github上Devstack的一些变动,截至8.20
    Tokyo Tyrant(TTServer)系列(二)-启动參数和配置
    云方案术语
    四大桌面云显示协议解析
    rdesktop -u qinrui -p 'Aa7788..' 192.168.3.117 -a 32 -g workarea
    IOS开发之block应用
    怎样用EA设计ER图
    使用Jsoup解析和操作HTML
    Speak a Good Word for SB
    LeetCode234_PalindromeLinkedList (推断是否为回文链表) Java题解
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6852143.html
Copyright © 2011-2022 走看看