文章目录
栈定义
栈:只允许在一端进行插入或删除操作的线性表,限制存取点的线性表
栈顶(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);
}
}
//出栈
}