顺序堆栈操作的实现
//定义顺序堆栈数据结构
/*初始化顺序堆栈*/
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);
}
}
代码运行结果如下

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

被折叠的 条评论
为什么被折叠?



