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

本文介绍了一个基于顺序表实现的顺序栈的基本操作,包括初始化、判断空栈与满栈、入栈、出栈及读取栈顶元素等核心功能,并通过示例展示了这些操作的具体流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/****************************************************************
文件内容:线性表之顺序栈操作
版本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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江海细流

如该文章对你有帮助,请支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值