顺序栈

栈分为两种,一种是顺序栈,一种是链栈。两种都是线性表的结构。

栈是比较特殊的一种线性表,只能在一端插入或是删除数据。只能插入和删除数据的一端为栈顶,而固定不变的是栈底。

栈完全符合先进后出(后进先出)的规则。

向栈中插入数据,叫做入栈(push)。

从栈中取出数据,叫做出栈(pop)。

两种情况下均是移动栈顶指针。

#include <stdio.h>
#define MaxSize 30

typedef int ElemType;

typedef struct {
	int data[MaxSize]; //数据
	int top; //栈顶
}SeqStack; //线性表,顺序栈定义

void initSeqStack(SeqStack &st);
int pushSeqStack(SeqStack &st, int x);
int popSeqStack(SeqStack &st, int &x);
bool isEmpty(SeqStack &st);

void initSeqStack(SeqStack &st) {
	st.top = -1;
}

/*入栈函数,先移动栈顶指针,再入栈数据*/
int pushSeqStack(SeqStack &st, int x) {
	if (st.top == MaxSize - 1)
		return 0; //SeqStack已满,不能入栈
	else {
		++st.top;
		st.data[st.top] = x;
		return 1;
	}
}

/*出栈函数,先将数据取出,再移动栈顶指针*/
int popSeqStack(SeqStack &st, int &x) {
	if (st.top == -1)
		return 0; //SeqStack已空,没有数据可以出栈
	else {
		x = st.data[st.top];
		--st.top;
		return 1;
	}
}

/*判断顺序栈是否为空*/
bool isEmpty(SeqStack &st) {
	if (st.top == -1) {
		return true;
	}else {
		return false;
	}
}

/*返回栈中元素的个数*/
int size(SeqStack &st) {
	return st.top + 1;
}

int main()
{
	SeqStack st;
	initSeqStack(st);

	ElemType a = 1;
	pushSeqStack(st, a);
	printf("%d push stack\n", a);
	pushSeqStack(st, 2);
	printf("%d push stack\n", 2);
	pushSeqStack(st, 3);
	printf("%d push stack\n", 3);

	printf("pop element from stack\n");
	while (!isEmpty(st)) {
		printf("size of stack is %d\n", size(st));
		ElemType temp = 0;
		popSeqStack(st, temp);
		printf("pop element is %d\n", temp);
	}
	printf("\n");
	getchar();
    return 0;
}

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

洛白南歌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值