算法与数据结构之五----顺序栈

来源:互联网 发布:中小企业网络部署方案 编辑:程序博客网 时间:2024/06/14 01:10
/****************************************************************
文件内容:线性表之顺序栈操作
版本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 Seqstack
{
INT32 data[MAX];
INT32 Top;
}seqstack,* Sqstack;


/****************************************************************
函数功能:初始化顺序栈
输入参数: 无
返回值: 顺序的栈的标头指针
说明:顺序栈是由顺序来实现,所有的操作方式都是跟顺序表一样,只是某些操作堆栈来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
Sqstack Init_Sqstack()
{
Sqstack s = NULL;
s = (struct Seqstack * )malloc(sizeof (struct Seqstack));
if(NULL)
{
Log("malloc is failed\n");
}
else
{
Log( "malloc is sucessed \n");
}
s->Top = -1;

return s;
}
/****************************************************************
函数功能:判断顺序栈是否为空栈
输入参数: 无
返回值: 顺序的栈的标头指针
说明:顺序栈是由顺序来实现,所有的操作方式都是跟顺序表一样,只是某些操作堆栈来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Is_Empty_Seqstack(Sqstack q)
{
if (-1 == q->Top )
{
Log("sorry,the stack is NULL");
return 0;
}
else
{
return 1;
}
}
/****************************************************************
函数功能: 判断顺序栈是否已经满
输入参数: 无
返回值: 顺序的栈的标头指针
说明:顺序栈是由顺序来实现,所有的操作方式都是跟顺序表一样,只是某些操作堆栈来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Is_Full_Seqstack(Sqstack q)
{
if (MAX-1 == q->Top )
{
Log("sorry,the stack is FULL");
return 0;
}
else
{
return 1;
}
}
/****************************************************************
函数功能: 顺序栈入栈
输入参数: 无
返回值: 顺序的栈的标准指针
说明:顺序栈是由顺序来实现,所有的操作方式都是跟顺序表一样,只是某些操作堆栈来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Push_Sqstack(Sqstack q,INT32 X)
{
if(!Is_Full_Seqstack(q))
{
return -1;
}
q->Top++;
q->data[q->Top] = X;
return q->Top;
}
/****************************************************************
函数功能: 顺序栈出栈
输入参数: 无
返回值: 顺序的栈的标准指针
说明:顺序栈是由顺序来实现,所有的操作方式都是跟顺序表一样,只是某些操作堆栈来说是
非法的。
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Pop_Sqstack(Sqstack q )
{
INT32 temp;
if(!Is_Empty_Seqstack(q))
{
return -1;
}
temp = q->data[q->Top];
q->Top--;
return temp;
}
/****************************************************************
函数功能: 顺序栈读栈顶元素
输入参数: 无
返回值: 顺序的栈的标准指针
说明:顺序栈是由顺序来实现,所有的操作方式都是跟顺序表一样,只是某些操作堆栈来说是
非法的。
出栈会修改栈顶指针,而读栈顶元素,不需修改栈顶指针
作者:HFL
时间:2013-12-29
*****************************************************************/
INT32 Read_Sqstack(Sqstack q )
{
INT32 temp;
if(!Is_Empty_Seqstack(q))
{
return -1;
}
temp = q->data[q->Top];
return temp;
}
void main()
{
INT32 i = 0,Ret = -1;
seqstack * s = NULL;

Log("*******************************\n");
Log("* *\n");
Log("* Init seqlist is start ! *\n");
Log("* *\n");
Log("*******************************\n");
s= Init_Sqstack();
if (!s)
{
Log( "Init_seqstack is failed!\n");
}
else
{
Log( "Init_seqstack is sucessed\n");
}
Log("*******************************\n");
Log("* *\n");
Log("* Push seqstack is start ! *\n");
Log("* *\n");
Log("*******************************\n");
for(i=0;i<MAX;i++)
{
Push_Sqstack(s,i+1);
}
Log("*******************************\n");
Log("* *\n");
Log("* Pop seqstack is start ! *\n");
Log("* *\n");
Log("*******************************\n");
for(i=0;i<4;i++)
{
Log("The Pop data is [%d]\n",Pop_Sqstack(s));
}
Log("*******************************\n");
Log("* *\n");
Log("* Read seqstack element ! *\n");
Log("* *\n");
Log("*******************************\n");
Log("The stack top element is %d\n",Read_Sqstack(s));
}
0 0
原创粉丝点击