C语言实现顺序栈的各种操作

C语言-顺序栈的基本操作

一、我们先明确一下什么是栈?
栈(Stack):只允许在一端进行插入或删除操作的线性表
栈顶(Top):允许操作的一端
栈底(Bottom):固定的,不允许操作的一端
同时,栈具有后进先出的特点

二、栈的存储结构是怎样的呢?
栈的顺序存储结构如下:
我们开辟了11个连续的int型内存空间,10个存储数据,1个存储栈顶指针

#define MaxSize 10

typedef struct{
	int data[MaxSize];	//开辟整片连续空间
	int top;			//栈顶指针,其值为数组的下标
}SqStack;

三、顺序栈的各种操作:
1.初始化栈,把栈顶指针设置为-1,不指向任何数组元素。

/*
顺序栈的基本操作 
*/
#include<stdio.h> 
#include<stdlib.h>
#define MaxSize 10	//栈的最大容量

typedef struct{
	int data[MaxSize];
	int top;			//栈顶指针,指向数组的下标 
}SqStack; 

//初始化空栈
void InitStack(SqStack *S){
	S->top = -1;			//初始化顺序栈的栈顶 
} 

2、判空,如果栈顶指针为-1,那么栈没有任何元素

//判断栈是否为空 
int StackEmpty(SqStack S) {
	if(S.top == -1) 
		return 1;
	else	
		return 0;
}

3、进栈操作,栈不满时,栈顶指针先加1,再赋值

//新元素入栈
int Push(SqStack *S,int x){
	if(S->top==MaxSize - 1){
		printf("栈满,插入元素失败");
		return 0; 
	}
	S->top += 1;			//栈未满时,栈顶指针先加1 
	S->data[S->top] = x;	//再把值送到栈顶元素 
	return 1;
} 

4、出栈操作,栈非空时,先取值,再把栈顶指针减1

//栈顶元素出栈
int Pop(SqStack *S){
	int top_number=0;
	if(S->top == -1){
		printf("栈空,取出元素失败");
		return 0; 
	}
	top_number = S->data[S->top];	//栈非空时,先取出栈顶元素 
	S->top --;						//再把栈顶指针减1,此时数据还残留在内存中,知识逻辑上删除了 
	return top_number;				//返回栈顶元素 
	
}

5、销毁栈,分为物理销毁或逻辑销毁
物理销毁会释放内存空间
逻辑销毁则让指针初始化,存储数据的空间依旧残留旧数据

//销毁栈
void DestroyStack(SqStack *S){
	free(S);		//物理上销毁,销毁内存空间
	//S->top = -1;	  逻辑上销毁,让指针回到初始位置,内存空间上残留之前的数据 
} 

6、测试代码

void main(){
	SqStack S;		//声明,内存中开辟空间
	InitStack(&S);	//初始化,栈顶指针设置为-1
	Push(&S,5);		//栈未满时,入栈,栈顶指针先加1再赋值
	printf("出栈元素是%d",Pop(&S)); //栈非空时,出栈,先取值再把栈顶指针减1
	DestroyStack(&S);	//销毁栈
} 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值