• QUEUE Implement a first in, first out linked list


    /*
     * File:    queue.h
     * Purpose: Implement a first in, first out linked list
     *
     * Notes:
     */
    
    #ifndef _QUEUE_H_
    #define _QUEUE_H_
    
    /********************************************************************/
    
    /* 
     * Individual queue node
     */
    typedef struct NODE
    {
      struct NODE *next;
    } QNODE;
    
    /* 
     * Queue Struture - linked list of qentry items 
     */
    typedef struct
    {
      QNODE *head;
      QNODE *tail;
    } QUEUE;
    
    /*
     * Functions provided by queue.c
     */
    void queue_init( QUEUE * );
    
    int queue_isempty( QUEUE * );
    
    void queue_add( QUEUE *, QNODE * );
    
    QNODE* queue_remove( QUEUE * );
    
    QNODE* queue_peek( QUEUE * );
    
    void queue_move( QUEUE *, QUEUE * );
    
    /********************************************************************/
    
    #endif /* _QUEUE_H_ */
    
    /*
     * File:    queue.c
     * Purpose: Implement a first in, first out linked list
     *
     * Notes:   
     */
    
    #include "queue.h"
    
    /********************************************************************/
    /* 
     * Initialize the specified queue to an empty state
     * 
     * Parameters:
     *  q   Pointer to queue structure
     */
    void queue_init( QUEUE *q )
    {
      q->head = NULL;
    }
    /********************************************************************/
    /* 
     * Check for an empty queue
     *
     * Parameters:
     *  q       Pointer to queue structure
     * 
     * Return Value:
     *  1 if Queue is empty
     *  0 otherwise
     */
    int queue_isempty( QUEUE *q )
    {
      return ( q->head == NULL );
    }
    /********************************************************************/
    /* 
     * Add an item to the end of the queue 
     *
     * Parameters:
     *  q       Pointer to queue structure
     *  node    New node to add to the queue
     */
    void queue_add( QUEUE *q, QNODE *node )
    {
      if ( queue_isempty( q ) )
      {
        q->head = q->tail = node;
      }
      else
      {
        q->tail->next = node;
        q->tail = node;
      }
    
      node->next = NULL;
    }
    
    /********************************************************************/
    /* 
     * Remove and return first (oldest) entry from the specified queue 
     *
     * Parameters:
     *  q       Pointer to queue structure
     *
     * Return Value:
     *  Node at head of queue - NULL if queue is empty
     */
    QNODE*
    queue_remove( QUEUE *q )
    {
      QNODE *oldest;
    
      if ( queue_isempty( q ) )
        return NULL;
    
      oldest = q->head;
      q->head = oldest->next;
      return oldest;
    }
    /********************************************************************/
    /* 
     * Peek into the queue and return pointer to first (oldest) entry.
     * The queue is not modified
     *
     * Parameters:
     *  q       Pointer to queue structure
     *
     * Return Value:
     *  Node at head of queue - NULL if queue is empty
     */
    QNODE*
    queue_peek( QUEUE *q )
    {
      return q->head;
    }
    /********************************************************************/
    /* 
     * Move entire contents of one queue to the other
     *
     * Parameters:
     *  src     Pointer to source queue
     *  dst     Pointer to destination queue
     */
    void queue_move( QUEUE *dst, QUEUE *src )
    {
      if ( queue_isempty( src ) )
        return;
    
      if ( queue_isempty( dst ) )
        dst->head = src->head;
      else
        dst->tail->next = src->head;
    
      dst->tail = src->tail;
      src->head = NULL;
      return;
    }
    /********************************************************************/

  • 相关阅读:
    VS Code 使用笔记
    Haskell语言开发工具
    Haskell语言学习笔记(81)Data.Typeable
    Haskell语言学习笔记(80)req
    Haskell语言学习笔记(79)lambda演算
    Haskell语言学习笔记(78)fix
    2733: [HNOI2012]永无乡
    牛课练习赛17
    bzoj3758. 数数
    【BZOJ1786】[Ahoi2008]Pair 配对
  • 原文地址:https://www.cnblogs.com/shangdawei/p/3036804.html
Copyright © 2020-2023  润新知