顺序堆栈——全代码+注释

#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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值