顺序栈都比较简单,没啥可说的自己看吧,看懂以后再看链栈
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
using namespace std;
初始化
typedef struct {
//int *data;//动态建栈的过程,如果这样写的话,下面 initStack要用第一种方式
int data[MaxSize];//静态方式常用,直接定义数组长度,初试化过程就超级简单
int top;
}SeqStack,* LinkStack;
//动态初始化,适合结构体里面定义的是 int *data;
void initStack(LinkStack &s)
{
s = (SeqStack*)malloc(sizeof(SeqStack));
s->data = (int *)malloc(sizeof(int)*MaxSize);
s->top = -1;
}
//静态初始化(常用)
void initStack(LinkStack &s)
{
s->top = -1;
}
判断是否为空,是否已满
//判断栈是否为空,这个太简单了,看看就行
bool isEmpty(LinkStack s)
{
if (s->top == -1) return true;
else return false;
}
//判断栈是否已满,这个也太简单了,看看就行
bool isFull(LinkStack s)
{
if (s->top == MaxSize - 1) return true;
else return false;
}
入栈(向栈顶插入元素)
bool push(LinkStack &s, int x)
{
if (!isFull(s)) //入栈只管满不满
{
s->top ++;
s->data[s->top] = x;
return true;
}
else
return false; //栈满
}
出栈(删除栈顶元素)
bool pop(LinkStack &s, int &x) {
if (!isEmpty(s)) //出栈只管空不空
{
x = s->data[s->top --];
return true;
}
else
return false; //栈空
}
读取(返回栈顶元素)
//这种方式是把栈顶元素赋值给x带拿走
bool getTop(LinkStack s, int &x)
{
if (!isEmpty(s))
{
x = s->data[s->top];
return true;
}
else
return false;
}
//最简单粗暴的是直接返回栈顶元素(常用)
int getTop(LinkStack s)
{
if (!isEmpty(s)) return s->data[s->top];
else return false;
}
发现有问题了,及时跟我反应
返回目录:
https://www.acwing.com/file_system/file/content/whole/index/content/5976074/