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语言新手小白代码中如果有需要改正的地方,请各位大佬们评论批评指正。谢谢
有需要借鉴代码的小伙伴,使用时请标注出处,谢谢啦!