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

本文介绍如何使用循环单链表实现队列的基本操作,包括初始化队列、判断队列是否为空、入队列、出队列以及获取队列头部元素等关键函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//用循环单链表实现队列的基本操作
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)//遍历队列
{
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值