算法与数据结构之八----链队

来源:互联网 发布:美国听歌用什么软件 编辑:程序博客网 时间:2024/06/05 01:56
/****************************************************************
文件内容:线性表之链队操作
版本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());


}算法与数据结构之八----链队
0 0
原创粉丝点击