顺序栈的基础功能实现(C++)

哈哈哈第一次用C++把基础功能实现了

创建栈初始化入栈出栈

#include<cstdio>
#include<cstdlib>//bool类型实现的头文件
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
#define Status int
#define SElemType int
#define MaxSize 100

//栈的定义数据结构
typedef struct Stack {
	SElemType *base;
	SElemType *top;
	int stacksize;

}SqStack;

//基本操作*****************************************************************************
//顺序栈的初始化
Status InitStack(SqStack &s) {//构造一个空栈
	s.base = new SElemType[MaxSize];
	if (!s.base){
		printf("分配失败\n");
		return 0;
	}
	s.top = s.base;
	s.stacksize = MaxSize;

}

//顺序栈的入栈
Status Push(SqStack &s, SElemType e) {
	if (s.top - s.base == s.stacksize) return 0;//栈满
	*(s.top++) = e;//先用再加,先入栈再指针上移
	return 1;

}

//顺序栈的出栈
Status Pop(SqStack &s, SElemType &e){
	if (s.top == s.base) return 0;
	else e = *--s.top;//先减再用,先指针下移再出栈
	return 1;

}

//得到栈顶元素而不修改指针
bool GetTop(SqStack &s, SElemType &e) {
	if (s.top == s.base) return false;
	else e = *--s.top;//先减再用,先指针下移再出栈
	return true;

}

//功能实现函数***************************************************************************
//菜单与显示
void menu() {
	printf("1.入栈     2.出栈\n");
	printf("3.取栈顶   4.退出\n");

}

//入栈功能实现
void PushToSTack(SqStack &s) {
	int n; SElemType e; int flag;
	printf("请输入入栈元素个数(>=1): \n");
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++)
	{
		printf("请输入第%d个元素的值:", i + 1);
		scanf_s("%d", &e);
		flag = Push(s, e);
		if (flag) printf("%d已入栈\n", e);
		else { printf("栈已满!\n"); break;
		}
    }

}

//出栈功能实现
void PopFromStack(SqStack &s) {
	int n; SElemType e; int flag;
	printf("请输入出栈元素个数(>=1): \n");
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++)
	{
		printf("请输入第%d个元素的值:", i + 1);
		scanf_s("%d", &e);
		flag = Push(s, e);
		if (flag) printf("%d已出栈\n", e);
		else {
			printf("栈已空!\n"); break;
		}
	}

}

//取栈顶功能实现
void GetTopOfStack(SqStack &s) {
	SElemType e; bool flag;
	flag = GetTop(s, e);
	if (flag) printf("栈顶元素为:%d\n", e);
	else printf("栈已空!\n");

}

//主函数
int main() {
	SqStack s; int choice;
InitStack(s);
while (1)
{
	menu();
	printf("请输入菜单单号: \n");
	scanf_s("%d", &choice);
	if (choice == 4)break;
	switch (choice)
	{
	case 1:PushToSTack(s); break;
	case 2:PopFromStack(s); break;
	case 3:GetTopOfStack(s); break;
	default:printf("输入错误!\n");
	}
}
return 0;

}

实现功能效果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值