用循环单链表实现队列的基本操作

// 用循环单链表实现队列的基本操作
extern  HOST_INFO host;
PNode head;
// extern link table function 
int  isEmptyQueue_link();
void  enQueue_link(DataType x);
void  deQueue_link();
DataType
*  frontQueue_link();
void  scan_link(PNode p);

// 初始化队列函数
void  init_quen()
{
 head
= NULL;
}

// 判断队列是否为空函数
int  isEmptyQueue_link() // 判断队列是否为空
{
 
if (head == NULL)
  
return  FALSE;
 
return  TRUE;
}
// 入队列函数
void  enQueue_link(DataType x)
{
 
        PNode flag
= NULL; // flag 始终指向第一个结点
        PNode q = NULL;
 
if (head == NULL) // 创建第一个结点
 { if ((head = (PNode)malloc( sizeof ( struct  Node))) == NULL)
              printf(
" malloc failed! " );
  memcpy(
& (head -> info), & x, sizeof (x));
  head
-> link = head; // 头指针p 始终指向尾结点
  flag = head;
 }
 
else   // 创建其他结点
               {   flag = head -> link; // 在改变头指针指向前使flag始终保持指向首结点
                  q = head;
      
if ((head = (PNode)malloc( sizeof ( struct  Node))) == NULL)
              printf(
" malloc failed! " );
        memcpy(
& (head -> info), & x, sizeof (x));
          q
-> link = head;
          head
-> link = flag;}
}
// 出队列函数
void  deQueue_link()
{
 PNode q;
 
if (head == NULL)
  printf(
" quene is NULL! " );
 
else  
   
if (head -> link == head) // 只有一个结点的删除处理
   {free(head);
   head
= NULL;}
   
else   // 两个或者两个以上结点的时候的删除处理
   {    q = head -> link;
        head
-> link = head -> link -> link; 
        free(q);
                  
   }
}
// 取队列头部元素值
DataType *  frontQueue_link()
{
 
if (head == NULL)
 {printf(
" quene is NULL! " );
  
return  NULL; // 返回一个特殊值
 }
 
else   return ( & (head -> link -> info));
}
void  scan_link(PNode p) // 遍历队列
{
}
 

你可能感兴趣的:(C++,算法设计)