C语言 一分钟看懂的顺序存储栈表操作

栈定义

栈:只允许在一端进行插入或删除操作的线性表,限制存取点的线性表
栈顶(TOP) : 线性表允许插入删除的那一端
栈底 : 固定的,不允许插入删除的一端
空栈 : 不含任何元素的空表

入栈图解
在这里插入图片描述
出栈图解
在这里插入图片描述

如果对你有所帮助,点个赞呗

顺序栈的存储结构

#define MaxSize 20
typedef struct Stck
{
	int data[MaxSize];
	int top;//栈定指针
}Stck;

栈顶指针 : 初始值设置 S.top=-1
入栈: S.top先加1,在入栈
出栈: 先出栈,S.top在减1
栈空判断条件: S.top==-1
栈满判断条件: S.top=MaxSize-1

基本操作代码

栈 初始化

void InitStck(Stck *S)
{
	S->top = -1;//初始化栈顶指针
}

栈 判空

int StckEmpty(Stck S)
{
	if (S.top == -1)
	{
		return -1;//表示栈为空
	}
	return 0;
}

进栈

int Push(Stck *S,int Value)
{
	if (S->top == MaxSize - 1)
	{
		return 1;//栈已满
	}
	S->top++;//栈指针加1;
	S->data[S->top] = Value;//入栈
	return 0;
}

出栈

int Pop(Stck *S)
{
	int Value;
	if (StckEmpty(*S) == -1)
	{
		return -1;//栈为空
	}
	Value = S->data[S->top];//出栈
	S->data[S->top] = '\0';//销毁栈顶元素
	S->top--;//栈指针减1;
	return Value;//返回出栈元素
}

获得栈顶元素

int GetTop(Stck S)
{
	if (StckEmpty == -1)//判断栈是否为空
	{
		printf("栈为空,禁止操作\n");
		return 0;
	}
	int Value;
	Value = S.data[S.top];//获取栈顶元素
	return Value;
}

完整代码

文件夹结构

头文件代码

#pragma once
#ifndef __线性表栈__H__
#define __线性表栈__H___
#define MaxSize 20
typedef struct Stck
{
	int data[MaxSize];
	int top;
}Stck;

void InitStck(Stck *S);//初始化栈
int StckEmpty(Stck S);//判断栈是否为空
int Push(Stck *S,int Value);//进栈
int Pop(Stck *S);//出栈
int GetTop(Stck S);//获得栈顶元素
#endif // !__线性表栈__H__

资源文件代码

#include"线性表栈.h"


void InitStck(Stck *S)
{
	S->top = -1;//初始化栈顶指针
}
//初始化栈

int StckEmpty(Stck S)
{
	if (S.top == -1)
	{
		return -1;//表示栈为空
	}
	return 0;
}
//判断栈是否为空

int Push(Stck *S,int Value)
{
	if (S->top == MaxSize - 1)
	{
		return 1;//栈已满
	}
	S->top++;//栈指针加1;
	S->data[S->top] = Value;//入栈
	return 0;
}
//进栈
int Pop(Stck *S)
{
	int Value;
	if (StckEmpty(*S) == -1)
	{
		return -1;//栈为空
	}
	Value = S->data[S->top];//出栈
	S->data[S->top] = '\0';//销毁栈顶元素
	S->top--;//栈指针减1;
	return Value;//返回出栈元素
}
//出栈

int GetTop(Stck S)
{
	if (StckEmpty == -1)//判断栈是否为空
	{
		printf("栈为空,禁止操作\n");
		return 0;
	}
	int Value;
	Value = S.data[S.top];//获取栈顶元素
	return Value;
}
//获得栈顶元素

主函数文件

#include<stdio.h>
#include"线性表栈.h"

void main()
{
	Stck S = {'\0'};
	{
		InitStck(&S);
		printf("初始化成功\n");
	}
	//初始化栈

	{
		int Empty;
		Empty = StckEmpty(S);
		if (Empty == -1)
			printf("栈为空\n");
		else
			printf("栈不为空\n");
	}
	//判断栈是否为空
	{
		int Value;//输入入栈值
		int time;//入栈次数
		printf("请输入入栈次数\n");
		scanf_s("%d", &time);
		getchar();
		int i=0;
		int State;
		while (i < time)
		{
			printf("请输入入栈值\n");
			scanf_s("%d", &Value);
			State = Push(&S, Value);
			if (State == 1)
			{
				printf("栈已满禁止入栈\n");
			}
			i++;
		}
	}
	//进栈
	{
		int Value;
		Value=Pop(&S);
		if (Value == -1)
		{
			printf("栈已空,禁止出栈\n");
		}
		else
		{
			printf("出栈元素为:%d", Value);
		}
	}
	//出栈


}

欢迎大家在评论区赐教,谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

~搬~运~工~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值