简单数据结构-堆栈模拟
涉及知识点:内存管理、结构体定义、基本数据结构
要求:
编写一个程序模拟堆栈,要求能够模拟、入栈、出栈、返回栈顶元素等基本操作。栈中元素可用整数代替。不能使用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号同邮箱