数据结构——使用C语言 堆栈之顺序堆栈操作的实现

本文介绍了一种基于数组实现的顺序堆栈数据结构及其基本操作,包括初始化、判断空栈、入栈、出栈和获取栈顶元素等。通过具体代码示例展示了如何使用这些操作,并提供了一个简单的测试程序来验证堆栈的功能。

顺序堆栈操作的实现

//定义顺序堆栈数据结构

/*初始化顺序堆栈*/
void StackInitiate(SeqStack* s);


/*检查堆栈是否为空*/
//如果为空返回0.否则返回1
int StackNotEmpty(SeqStack s);


/*入栈*/
//在堆栈s中插入元素x
//入栈成功返回1,否则返回0
int StackPush(SeqStack* s, DataType x);


/*出栈*/
//在堆栈s中取出栈顶元素,由x带回
//出栈成功返回1,否则返回0
int StackPop(SeqStack* s, DataType *x);



/*取栈顶元素*/
//在堆栈s中取出当前栈顶元素,由x带回
//取出成功返回1,否则返回0
int StackTop(SeqStack s, DataType* x);

1.定义结构体

/*初始化顺序堆栈*/
void StackInitiate(SeqStack* s)
{
	s->top = 0;//置栈顶元素为空
}

2.初始化顺序堆栈

/*初始化顺序堆栈*/
void StackInitiate(SeqStack* s)
{
	s->top = 0;//置栈顶元素为空
}

3.检查堆栈是否为空

/*检查堆栈是否为空*/
//如果为空返回0.否则返回1
int StackNotEmpty(SeqStack s)
{
	if (s.top <= 0)
		return 0;
	else
		return 1;
}

4.入栈

/*入栈*/
//在堆栈s中插入元素x
//入栈成功返回1,否则返回0
int StackPush(SeqStack* s, DataType x)
{
	if (s->top >= MaxStackSize)
	{
		printf("堆栈已满,无法入栈");
		return 0;
	}
	else
	{
		s->Stack[s->top] = x;
		s->top++;
		return 1;
	}
}

5.出栈

/*出栈*/
//在堆栈s中取出栈顶元素,由x带回
//出栈成功返回1,否则返回0
int StackPop(SeqStack* s, DataType* x)
{
	if (s->top <= 0)
	{
		printf("堆栈已空,无法出栈");
		return 0;
	}
	else
	{
		s->top--;
		*x = s->Stack[s->top];
		return 1;
	}
}

6.取栈顶元素

/*取栈顶元素*/
//在堆栈s中取出当前栈顶元素,由x带回
//取出成功返回1,否则返回0
int StackTop(SeqStack s, DataType* x)
{
	if (s.top <= 0)
	{
		printf("堆栈已空,无法取出当前栈顶元素");
		return 0;
	}
	else
	{
		*x = s.top;
		return 1;
	}
}

顺序堆栈的测试:

#include<stdio.h>
#define MaxStackSize 100
#include"stacklist.h"  //包含堆栈的头文件
int main()
{
	SeqStack seqstack;
	int i, x;
	StackInitiate(&seqstack);
	for (i = 0; i < 10; i++)
	{
		StackPush(&seqstack, i + 1);
	}
	StackTop(seqstack, &x);
	printf("当前栈顶元素为%d\n", x);
	while (StackNotEmpty(seqstack))
	{
		StackPop(&seqstack, &x);
		printf("%d  ", x);
	}
}

代码运行结果如下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值