/****************************************************************
文件内容:线性表之链队操作
版本V1.0
作者:HFL
时间:2013-12-22
*****************************************************************/
#include<stdio.h>
#include<stdlib.h>
//#define RELEASE_VERSION //release版本开关
//#define TRIDiTION
/*inlude<malloc.h> stdlib.h 包含malloc.h*/
#ifdef RELEASE_VERSION
#define Log
#else
#define Log printf
#endif
/*为了提高程序的可移植性,千万不能使用裸露的数据类型*/
#ifndef UINT32
typedef unsigned int UINT32 ;
#endif
#ifndef INT32
typedef int INT32 ;
#endif
typedef struct Node
{
INT32 data;
struct Node * next;
}linksequeue, * LkSq;
typedef struct Pointer
{
LkSq Rear;
LkSq Front;
}Hander;
Hander * p = NULL;
/****************************************************************
函数功能:创建一个节点
输入参数: 无
返回值:节点的指针
作者:HFL
时间:2013-12-22
*****************************************************************/
LkSq Creat_Node(INT32 X)
{
LkSq s;
s=(struct Node *)malloc(sizeof(Node));
if(NULL==s)
{
Log(" sorry,Malloc is failed\n");
}
else
{
Log(" Malloc is successed!\n");
s->data = X;
}
return s;
}
/****************************************************************
函数功能:初始化链队
输入参数: 无
返回值: 链队的队顶指针指针
作者:HFL
时间:2013-12-29
*****************************************************************/
LkSq Init_Linkqueue()
{
LkSq q = NULL;
q = (struct Node *)malloc(sizeof(struct Node));
if(NULL== q)
{
Log(" sorry,Malloc Node is failed\n");
}
p = (struct Pointer *)malloc(sizeof(struct Pointer));
if(NULL== p)
{
Log(" sorry,Malloc Hander is failed\n");
}
p->Front = q;
p->Rear = q;
q->next = NULL;
return q;
}
/****************************************************************
函数功能:判断链队是否为空队
输入参数: 无
返回值: 链队的标头指针
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆队来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Is_Empty_Linkqueue(Hander * p)
{
if ( p->Front == p->Rear)
{
Log("sorry,the linkqueueis NULL");
return 0;
}
else
{
return 1;
}
}
/****************************************************************
函数功能: 链队入队
输入参数: 无
返回值: 链的队的标准指针
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆队来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
LkSq FIFO_IN_Linkqueue(INT32 X)
{
LkSq s;
s = Creat_Node(X);
p->Rear->next = s;
s->next = NULL ;
p->Rear = s;
return s;
}
/****************************************************************
函数功能: 链队出队
输入参数: 无
返回值: 链的队的标准指针
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作队列来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 FIFO_OUT_Linkqueue()
{
INT32 temp;
LkSq s;
if(!Is_Empty_Linkqueue(p))
{
return -1;
}
temp = p->Front->next->data; //还有节点的头节点需要考虑(头结点的数据域为空)
s = p->Front->next;
p->Front->next = p->Front->next->next;
free (s);
if( NULL == p->Front->next )
{
p->Front = p->Rear; //如果出队列后队列数据为空,收尾指针要修正)
}
return temp;
}
/****************************************************************
函数功能: 链队读前指针元素
输入参数: 无
返回值: 链的队的头指针指向的元素
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作队列来说是
非法的。
出队会修改栈顶指针,而读队前元素,不需修改头指针
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Read_Linkstack( )
{
INT32 temp;
if(!Is_Empty_Linkqueue(p))
{
return -1;
}
temp = p->Front->next->data;
return temp;
}
void main()
{
INT32 i ;
Log("*********************************\n");
Log("* *\n");
Log("* Init Linkqueue is start ! *\n");
Log("* *\n");
Log("*********************************\n");
Init_Linkqueue();
Log("********************************\n");
Log("* *\n");
Log("* Into Linkqueue is start ! *\n");
Log("* *\n");
Log("*********************************\n");
for(i=0;i<12;i++)
{
FIFO_IN_Linkqueue(i*2);
}
Log("*******************************\n");
Log("* *\n");
Log("* Output Linkqueue is start ! *\n");
Log("* *\n");
Log("*******************************\n");
for(i=0;i<10;i++)
{
Log("The OUTOUT element is %d\n",FIFO_OUT_Linkqueue());
}
Log("**************************************\n");
Log("* *\n");
Log("* Read Linkqueue Front is start ! *\n");
Log("* *\n");
Log("**************************************\n");
Log("The OUTOUT element is %d\n",Read_Linkstack());
}算法与数据结构之八----链队
文件内容:线性表之链队操作
版本V1.0
作者:HFL
时间:2013-12-22
*****************************************************************/
#include<stdio.h>
#include<stdlib.h>
//#define RELEASE_VERSION //release版本开关
//#define TRIDiTION
/*inlude<malloc.h> stdlib.h 包含malloc.h*/
#ifdef RELEASE_VERSION
#define Log
#else
#define Log printf
#endif
/*为了提高程序的可移植性,千万不能使用裸露的数据类型*/
#ifndef UINT32
typedef unsigned int UINT32 ;
#endif
#ifndef INT32
typedef int INT32 ;
#endif
typedef struct Node
{
INT32 data;
struct Node * next;
}linksequeue, * LkSq;
typedef struct Pointer
{
LkSq Rear;
LkSq Front;
}Hander;
Hander * p = NULL;
/****************************************************************
函数功能:创建一个节点
输入参数: 无
返回值:节点的指针
作者:HFL
时间:2013-12-22
*****************************************************************/
LkSq Creat_Node(INT32 X)
{
LkSq s;
s=(struct Node *)malloc(sizeof(Node));
if(NULL==s)
{
Log(" sorry,Malloc is failed\n");
}
else
{
Log(" Malloc is successed!\n");
s->data = X;
}
return s;
}
/****************************************************************
函数功能:初始化链队
输入参数: 无
返回值: 链队的队顶指针指针
作者:HFL
时间:2013-12-29
*****************************************************************/
LkSq Init_Linkqueue()
{
LkSq q = NULL;
q = (struct Node *)malloc(sizeof(struct Node));
if(NULL== q)
{
Log(" sorry,Malloc Node is failed\n");
}
p = (struct Pointer *)malloc(sizeof(struct Pointer));
if(NULL== p)
{
Log(" sorry,Malloc Hander is failed\n");
}
p->Front = q;
p->Rear = q;
q->next = NULL;
return q;
}
/****************************************************************
函数功能:判断链队是否为空队
输入参数: 无
返回值: 链队的标头指针
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆队来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Is_Empty_Linkqueue(Hander * p)
{
if ( p->Front == p->Rear)
{
Log("sorry,the linkqueueis NULL");
return 0;
}
else
{
return 1;
}
}
/****************************************************************
函数功能: 链队入队
输入参数: 无
返回值: 链的队的标准指针
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆队来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
LkSq FIFO_IN_Linkqueue(INT32 X)
{
LkSq s;
s = Creat_Node(X);
p->Rear->next = s;
s->next = NULL ;
p->Rear = s;
return s;
}
/****************************************************************
函数功能: 链队出队
输入参数: 无
返回值: 链的队的标准指针
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作队列来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 FIFO_OUT_Linkqueue()
{
INT32 temp;
LkSq s;
if(!Is_Empty_Linkqueue(p))
{
return -1;
}
temp = p->Front->next->data; //还有节点的头节点需要考虑(头结点的数据域为空)
s = p->Front->next;
p->Front->next = p->Front->next->next;
free (s);
if( NULL == p->Front->next )
{
p->Front = p->Rear; //如果出队列后队列数据为空,收尾指针要修正)
}
return temp;
}
/****************************************************************
函数功能: 链队读前指针元素
输入参数: 无
返回值: 链的队的头指针指向的元素
说明:链队是由链来实现,所有的操作方式都是跟链表一样,只是某些操作队列来说是
非法的。
出队会修改栈顶指针,而读队前元素,不需修改头指针
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Read_Linkstack( )
{
INT32 temp;
if(!Is_Empty_Linkqueue(p))
{
return -1;
}
temp = p->Front->next->data;
return temp;
}
void main()
{
INT32 i ;
Log("*********************************\n");
Log("* *\n");
Log("* Init Linkqueue is start ! *\n");
Log("* *\n");
Log("*********************************\n");
Init_Linkqueue();
Log("********************************\n");
Log("* *\n");
Log("* Into Linkqueue is start ! *\n");
Log("* *\n");
Log("*********************************\n");
for(i=0;i<12;i++)
{
FIFO_IN_Linkqueue(i*2);
}
Log("*******************************\n");
Log("* *\n");
Log("* Output Linkqueue is start ! *\n");
Log("* *\n");
Log("*******************************\n");
for(i=0;i<10;i++)
{
Log("The OUTOUT element is %d\n",FIFO_OUT_Linkqueue());
}
Log("**************************************\n");
Log("* *\n");
Log("* Read Linkqueue Front is start ! *\n");
Log("* *\n");
Log("**************************************\n");
Log("The OUTOUT element is %d\n",Read_Linkstack());
}算法与数据结构之八----链队