zoukankan      html  css  js  c++  java
  • 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;
    }
    /********************************************************************/

  • 相关阅读:
    一款简单易用的.Net 断言测试框架 : Shouldly
    单元测试 使用 Effort 内存数据库 报错
    解决 对路径bin oslyn..的访问被拒绝
    数据库设计:多选查询与匹配
    oracle快速创建主键
    models中,字段参数limit_choices_to的用法
    models中,对于(Small)IntegerField类型字段的choices参数在前端的展示
    Django ModelForm组件
    会议室预定
    Django admin管理工具
  • 原文地址:https://www.cnblogs.com/shangdawei/p/3036804.html
Copyright © 2011-2022 走看看