C语言程序设计基础--堆栈模拟

简单数据结构-堆栈模拟

涉及知识点:内存管理、结构体定义、基本数据结构
要求:
编写一个程序模拟堆栈,要求能够模拟、入栈、出栈、返回栈顶元素等基本操作。栈中元素可用整数代替。不能使用C++模板库预定义的类型。程序运行中可输入多组入栈、出栈操作,每次操作后展示栈中元素

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define N 1000//栈的大小
struct stack
{
	int array[N];//具体实现由数组实现
	int top;//模拟指针,标记栈顶
};
void init(stack* p);//栈的初始化
bool isEmpty(stack* p);//是否空栈
bool isFull(stack* p);//是否满栈
int getTop(stack* p);//获得栈顶
void push(stack* p, int pushNum);//压栈
void pop(stack* p);出栈
void show(stack* p);//打印栈中元素
int size(stack* p);//栈中元素数目
int main()
{
	stack Stack;
	int i,pushNum;
	init(&Stack);
	while (1)
	{
		cout << "请执行操作: [1]压栈 [2]出栈 [3]获得栈顶元素 [4]是否满栈 " << endl;
		cout << "[5] 是否空栈[6]元素数量[7]显示所有栈元素[8]结束" << endl;
		cin >> i;
		switch (i) {
			case 1:	
				cout << "请输入入栈元素: ";
				cin >> pushNum;
				push(&Stack, pushNum);
				break;
			case 2:
				pop(&Stack);
				break;
			case 3:
				cout << "栈顶元素为: " << getTop(&Stack)<<endl;
				break;
			case 4:
				if (isFull(&Stack))
					cout << "满栈" << endl;
				else
					cout << "未满栈" << endl;
				break;
			case 5:
				if (isEmpty(&Stack))
					cout << "空栈" << endl;
				else
					cout << "非空栈" << endl;
				break;
			case 6:
				cout << "栈内共有: " << size(&Stack) << "个元素" << endl;
				break;
			case 7:
				show(&Stack);
				break;
			default:
				return 0;	
		}
			
		
	}
}
void init(stack* p)
{
	p->top = -1;
	memset(p->array, 0, sizeof(int) * N);//初始化
}
bool isEmpty(stack* p)
{
	if (p->top == -1)
		return true;
	else
		return false;
}
bool isFull(stack* p)
{
	if (p->top == N - 1)
		return true;
	else
		return false;
}
int getTop(stack* p)
{
	return p->array[p->top];
}
void push(stack* p, int pushNum)
{
	if (isFull(p))
		printf("Error: stack overflow");
	else
	{
		p->array[p->top + 1] = pushNum;
		p->top++;
	}
}
void pop(stack* p)
{
	if (isEmpty(p))
	{
		printf("Empty stack cannot be ejected");
	}
	else
	{
		printf("%d\n", p->array[p->top]);
		p->top--;
	}
}
void show(stack* p)
{
	while (!isEmpty(p))
	{
		printf("%d\n", p->array[p->top]);
		p->top--;
	}
}
int size(stack* p)
{
	return p->top + 1;
}

ps:如有错误敬请指正,欢迎评论区交流或者发私信
邮箱1654407501@qq.com,QQ号同邮箱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怡人蝶梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值