算法与数据结构之六----链栈

来源:互联网 发布:winform通用框架 源码 编辑:程序博客网 时间:2024/06/05 19:09
/****************************************************************
文件内容:线性表之链栈操作
版本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
#define MAX 12
typedef struct Node
{
INT32 data;
    struct Node * next;
}linkstack, * Lkstack;




Lkstack Top;// 栈顶指针,相当于头指针,由于栈没有遍历和查找概念,故不引入头指针


/****************************************************************
函数功能:创建一个节点                        
输入参数:  无
返回值:节点的指针 
作者:HFL 
时间:2013-12-22
 *****************************************************************/
Lkstack Creat_Node(INT32 X)
{
 Lkstack 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
 *****************************************************************/  
Lkstack Init_Linkstack()
{
Top = NULL;
return Top;
}
/****************************************************************
函数功能:判断链栈是否为空栈                       
输入参数:  无
返回值: 链栈的标头指针 
说明:链栈是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆栈来说是
非法的。
作者:HFL 
时间:2013-12-29
 *****************************************************************/ 
INT32 Is_Empty_Linkstack()
{

  if (NULL == Top )
  {
 Log("sorry,the stack is NULL");
 return 0;
  }
  else
  {
    return 1;
  }
}
/****************************************************************
函数功能: 链栈入栈                      
输入参数:  无
返回值: 链的栈的标准指针
说明:链栈是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆栈来说是
非法的。
作者:HFL 
时间:2013-12-29
 *****************************************************************/ 
Lkstack Push_Linkstack(INT32 X)
{
Lkstack s;
s = Creat_Node(X);
s->next = Top ;
    Top = s;
return Top;
}
/****************************************************************
函数功能: 链栈出栈                      
输入参数:  无
返回值: 链的栈的标准指针
说明:链栈是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆栈来说是
非法的。
作者:HFL 
时间:2013-12-29
 *****************************************************************/ 
INT32  Pop_Linkstack()
{  
INT32 temp;
Lkstack s;
if(!Is_Empty_Linkstack())
{
     return -1;
}
    temp = Top->data;
s = Top;
    Top = Top->next;
free (s);
return temp;
}






/****************************************************************
函数功能: 链栈读栈顶元素                      
输入参数:  无
返回值: 链的栈的标准指针
说明:链栈是由链来实现,所有的操作方式都是跟链表一样,只是某些操作堆栈来说是
非法的。
出栈会修改栈顶指针,而读栈顶元素,不需修改栈顶指针
作者:HFL 
时间:2013-12-29
 *****************************************************************/
INT32  Read_Linkstack( )
{  
INT32 temp;
if(!Is_Empty_Linkstack())
{
     return -1;
}
    temp = Top->data;
    return temp;

void main()
{  
INT32 i ;
Log("*******************************\n");
Log("*                             *\n");
Log("*   Init LinkStack is start !   *\n");
Log("*                             *\n");
Log("*******************************\n");
Init_Linkstack();
Log("*******************************\n");
Log("*                             *\n");
Log("*   Push LinkStack is start !   *\n");
Log("*                             *\n");
Log("*******************************\n");
for(i=0;i<MAX;i++)
{
Push_Linkstack(i+1);
}
Log("*******************************\n");
Log("*                             *\n");
Log("*   Pop Linkstack is start !   *\n");
Log("*                             *\n");
Log("*******************************\n");
for(i=0;i<MAX-5;i++)
{
 Log("The Pop element is %d\n",Pop_Linkstack());
}
Log("*******************************\n");
Log("*                             *\n");
Log("*   Read Linkstack element !   *\n");
Log("*                             *\n");
Log("*******************************\n");
   Log("The stack top element is %d\n",Read_Linkstack());
}
0 0
原创粉丝点击