数据结构——栈的顺序存储结构

一.栈的概念

栈是一种操作受限的,只允许一端进行插入和删除的线性表,允许进行操作的一端叫做栈顶(top),另一端为栈底(bottom),插入操作为入栈或进栈,删除操作称为出栈或退栈。

二.栈的顺序存储结构

顺序栈类型

#define MAXSIZE//栈最大元素
typedef struct{
	datatype data[MAXSIZE];
	int top;//表示栈顶位置 
}SeqStack

指向顺序栈的指针

SeqStack *s; 

顺序栈基本操作:

(1)置空栈:建立栈空间,初始化栈顶指针

SeqStack *Init_SeqStack(){
	SeqStack *s;
	s = malloc(sizeof(SeqStack));
	s->top = -1;
	return s;
}

通常0下标端设为栈底,空栈时栈顶指针 top = -1,入栈时,栈顶指针 top++,出栈时,栈顶指针top--

(2)判空栈

int Empty_SeqStack(SeqStack *s){
	if(s->top == -1){
		return 1;
	}
	else{
		return 0;
	}
}

(3)入栈

int Push_SeqStack(SeqStack *s, datatype x){
	if(s->top == MAXSIZE-1){//栈满不能入栈 
		return 0;
	}
	else{
		s->top++;
		s->data[s->top] = x;
		return 1;
	} 
}

入栈时,要先判断栈是否满了,栈满条件为:s->top == MAXSIZE-1,栈满时再入栈会空间溢出,发生错误,称为上溢。

(4)出栈

int Pop_SeqStack(SeqStack *s, datatype *x){
	if(Empty_SeqStack(s)){//栈空不能出栈 
		return 0;
	}
	else{
		*x = s->data[s->top];
		s->top--;
		return 1;
	}
}

(5)取栈顶元素

int Top_SeqStack(SeqStack *s){
	if(Empty_SeqStack(s)){//栈空不能读栈 
		return 0;
	}
	else{
		return (s->data[s->top]);
	}
}

出栈和读栈顶元素操作,首先要判断栈是否为空,空栈不可操作,否则会发生错误;

出栈栈顶指针会下移一位 top--,读栈顶元素只需要读取栈顶元素的值,栈顶指针不用变。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

๑Aurora.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值