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