算法与数据结构之六----链栈
来源:互联网 发布: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());
}
文件内容:线性表之链栈操作
版本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
- 算法与数据结构之六----链栈
- 数据结构与算法之六堆排序
- 【数据结构与算法】排序算法之六:快速排序
- 数据结构与算法之AVL平衡树<六>
- 数据结构与算法之六(希尔排序,非稳定排序)
- 数据结构与算法(六)
- Java数据结构与算法之数据结构-逻辑结构-集合(六)------集合之ArrayList和LinkedList对比
- 算法与数据结构八日谈之六——数据结构专题(uncompleted)
- <六>java数据结构与算法 栈
- Java数据结构与算法分析《六》递归
- 数据结构与算法·实验六
- 数据结构与算法之六 双向链表和循环链表
- python 数据结构六 之 字典与集合
- 数据结构与算法学习笔记之--数据结构
- 数据结构与算法之----图
- 数据结构与算法之----串
- 数据结构与算法之----树
- 数据结构与算法之队列
- ubuntu12.04设置wifi热点给Android设备
- T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他
- DLL编写教程
- 绕过manage.py
- 创业人的起点和圈子问题
- 算法与数据结构之六----链栈
- 类和结构的对齐准则 这个最好
- stat函数使用
- 第一章
- 解决初次安装PyCharm后 No Python interpreter selected的问题
- 2014十大家族排行榜 2014年十大网络红人排行榜
- pku1007
- 南怀瑾-南禅7日学习(1)
- Dos文件格式与Unix格式转换:dos2unix,fromdos,todos