其他分享
首页 > 其他分享> > 数据结构——栈的顺序存储结构

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

作者:互联网

一.栈的概念

栈是一种操作受限的,只允许一端进行插入和删除的线性表,允许进行操作的一端叫做栈顶(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--,读栈顶元素只需要读取栈顶元素的值,栈顶指针不用变。 

标签:SeqStack,return,top,栈顶,指针,出栈,数据结构,顺序存储,结构
来源: https://blog.csdn.net/qq_62755767/article/details/123617908