数据结构:栈的学习(C语言)

1.对于栈的学习,首先是要了解一下栈的本质。栈其实就是一个被限制访问端口的链表。

2.栈的特点是:先进后出

3.栈的主要操作就是进栈(push)和出栈(pop)

4.博主使用的编译软件为 vs2022,其中可能有些地方跟别的编译软件不一样,需要的请自行参考 

以下是代码的实现

(1)定义栈的结构体

typedef struct Sqstack
{
	Elemtype data[Maxsize];
	int top;
}Sqstack;

(2)对栈进行初始化

//栈的初始化
bool Initstack(Sqstack* S)
{
	S->top = -1;
}

(3)栈判空

//栈判空
bool StackEmpty(Sqstack S)
{
	if (S.top == -1)	return true;
	else				return false;
}

(4)进栈(压栈)

//进栈(压栈)
bool Push(Sqstack* S, Elemtype e)
{
	if (S->top == Maxsize - 1)
		return false;
	S->data[++S->top] = e;
	return true;
}

(5)出栈

//出栈
bool Pop(Sqstack* S, Elemtype* e)
{
	if (StackEmpty(*S))
		return false;
	*e = S->data[S->top--];
	return true;
}

(6)读栈顶

//读栈顶
bool GetTop(Sqstack S, Elemtype* e)
{
	if (StackEmpty(S))
		return false;
	*e = S.data[S.top];
	return true;
}

代码总结:(本代码中 main 函数就是对于栈的一些操作进行验证的)

#include <stdio.h>
#include <stdlib.h>

#define Maxsize 50
#define bool char 
#define true 1
#define false 0

typedef int Elemtype;
typedef struct Sqstack
{
	Elemtype data[Maxsize];
	int top;
}Sqstack;

//栈的初始化
bool Initstack(Sqstack* S)
{
	S->top = -1;
}

//栈判空
bool StackEmpty(Sqstack S)
{
	if (S.top == -1)	return true;
	else				return false;
}

//进栈(压栈)
bool Push(Sqstack* S, Elemtype e)
{
	if (S->top == Maxsize - 1)
		return false;
	S->data[++S->top] = e;
	return true;
}

//出栈
bool Pop(Sqstack* S, Elemtype* e)
{
	if (StackEmpty(*S))
		return false;
	*e = S->data[S->top--];
	return true;
}

//读栈顶
bool GetTop(Sqstack S, Elemtype* e)
{
	if (StackEmpty(S))
		return false;
	*e = S.data[S.top];
	return true;
}

int main()
{
	Sqstack S;
	Initstack(&S);

	Push(&S, 1);
	Push(&S, 2);
	Push(&S, 3);
	Push(&S, 4);
	Push(&S, 5);
	Push(&S, 6);

	Elemtype X;
	int count = S.top;
	for (int i = 0; i <= count; i++)
	{
		printf("i = %d\n ", i);
		GetTop(S, &X);
		printf("GetTop = %d\n", X);
		Pop(&S, &X);
		printf("Pop = %d\n", X);
	}
	return 0;
}

ps:博主也是一名学习C语言新手小白代码中如果有需要改正的地方,请各位大佬们评论批评指正。谢谢

有需要借鉴代码的小伙伴,使用时请标注出处,谢谢啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值