#pragma once
//----------顺序堆栈----------
//堆栈的顺序表示与实现
//数组方式
//说明:下标为0开始,没有数据元时为0,入栈一个元素则变为1,能始终表示个数,能直接由该数字作插入下标
//优点:实现堆栈操作的所有函数中,没有循环语句,时间复杂度均为O(1)
//
//
//-------顺序堆栈的测试-------
//void main() {
// SeqStack myStack;
// int i, x;
//
// //初始化
// StackInitiate(&myStack);
//
// //压入数据元素 1-10
// for (i = 0; i < 10; i++) {
// StackPush(&myStack, i + 1);
// }
//
// //显示当前元素个数
// StackTop(myStack, &x);
// printf("当前栈顶元素为:%d\n", x);
//
// //依次出栈所有元素
// printf("依次出栈的数据元素序列如下:\n");
// while (StackNotEmpty(myStack)) {
// StackPop(&myStack, &x);
// printf("%d ", x);
// }
//}
#include<stdio.h>
#define MaxStackSize 100//不限定
typedef DataType;//不限定类型
typedef struct {
DataType stack[MaxStackSize];
int top;
}SeqStack;
//初始化顺序堆栈S
void StackInitiate(SeqStack* S) {
S->top = 0;
}
//飞空否
//判断顺序堆栈S是否空,非空则返回1,否则返回0
int StackNotEmpty(SeqStack S) {
if (S.top <= 0)
return 0;
else
return 1;
}
//入栈
//把数据元素的值x存入顺序堆栈S中,入栈成功返回1,否则返回0
int StackPush(SeqStack* S, DataType x) {
if (S->top >= MaxStackSize) {
printf("堆栈已满无法插入!\n");
return 0;
}
else {
S->stack[S->top] = x;
S->top++;
return 1;
}
}
//出栈
//取出顺序堆栈S的栈顶数据元素值由参数d带回,出栈成功返回1,否则返回0
int StackPop(SeqStack* S, DataType* d) {
if (S->top <= 0) {
printf("堆栈已空,无数据元素可出栈!\n");
return 0;
}
else {
S->top--;
*d = S->stack[S->top];
return 1;
}
}
//取栈顶数据元素
//取顺序栈顶S的当前栈顶数据元素值由参数d带回,成功返回1,否则返回0
int StackTop(SeqStack S, DataType* d) {
if (S.top <= 0) {
printf("栈顶已空!");
return 0;
}
else {
*d = S.stack[S.top - 1];
return 1;
}
}
顺序堆栈——全代码+注释
最新推荐文章于 2025-01-17 00:35:54 发布