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