顺序栈的实现

news/2024/10/7 8:27:54
/********************************************************************************************************
*
*	file name:	Zqh_栈实现.c
* 	author	 :	keyword2024@163.com
* 	date	 :	2024/05/05
* 	function :	该程序实现顺序栈元素的增删改查	
*	note	 :	模板
*	
*  Copyright (c)  2023-2024   keyword2024@163.com    All right Reserved
* ******************************************************************************************************/#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>//指的是顺序栈中的元素的数据类型,用户可以根据需要进行修改
typedef int  DataType_t;//构造记录顺序栈SequenceStack各项参数(栈底地址+栈容量+栈顶元素的下标)的结构体
typedef struct SequenceStack
{DataType_t * Bottom;		//记录栈底地址unsigned int Size;			//记录栈容量int			 Top;      		//记录栈顶元素的下标	}SeqStack_t;//创建顺序表并对顺序栈进行初始化
SeqStack_t * SeqStack_Create(unsigned int size)
{//1.利用calloc为顺序栈的管理结构体申请一块堆内存SeqStack_t *Manager = (SeqStack_t *)calloc(1,sizeof(SeqStack_t));if(NULL == Manager){perror("calloc memory for manager is failed");exit(-1); //程序异常终止}//2.利用calloc为所有元素申请堆内存Manager->Bottom = (DataType_t *)calloc(size,sizeof(DataType_t));if (NULL == Manager->Bottom){perror("calloc memory for Stack is failed");free(Manager);exit(-1); //程序异常终止}//3.对管理顺序栈的结构体进行初始化(元素容量 + 最后元素下标)Manager->Size = size;	//对顺序栈中的容量进行初始化Manager->Top = -1;		//由于顺序栈为空,则栈顶元素的下标初值为-1return Manager;
}//判断顺序栈是否已满
bool SeqStack_IsFull(SeqStack_t *Manager)
{return (Manager->Top + 1 == Manager->Size) ? true : false;
}//入栈
bool SeqStack_Push(SeqStack_t *Manager, DataType_t Data)
{//1.判断顺序栈是否已满if ( SeqStack_IsFull(Manager) ){printf("SeqStack Full is Full!\n");return false;}//2.如果顺序栈有空闲空间,则把新元素添加到顺序栈的栈顶Manager->Bottom[++Manager->Top] = Data;return true;
}//判断顺序栈是否为空
bool SeqStack_IsEmpty(SeqStack_t *Manager)
{return (-1 == Manager->Top) ? true : false;
}//出栈
DataType_t SeqStack_Pop(SeqStack_t *Manager)
{DataType_t temp = 0;  //用于存储出栈元素的值//1.判断顺序栈是否为空if ( SeqStack_IsEmpty(Manager) ){printf("SeqStack is Empty!\n");return;}//2.由于删除了一个元素,则需要让顺序栈的栈顶元素下标-1temp = Manager->Bottom[Manager->Top--];return temp;
}//遍历顺序表的元素
void SeqStack_Print(SeqStack_t *Manager)
{for (int i = 0; i <= Manager->Top; ++i){printf(" Stack Element[%d] = %d\n",i,Manager->Bottom[i]);}
}int main(int argc, char const *argv[])
{return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28319.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

双向循环链表的实现

双向循环链表的模板/******************************************************************************************************** * * file name: Zqh_链表.c * author : keyword2024@163.com * date : 2024/05/05 * function : 链表的增删改查 * note : 模板 * * Co…

工作感受月记(202405月)

2024年05月06号 新的一月工作天,旧事未清理,新事不停生。 今日工作事项: 1/ 来了一个新案例,apim stv1 升级到stv2的情况,客户需要noam同学来帮助建会议处理问题。 2/ 自己研究durable function的4001端口问题,证明确实是gRPC需要使用,用于 isolated process处理时候,进…

冲刺第三天

今天继续优化登录界面,寻找到了app的图标和想出了名字,

线程池核心原理浅析

由于系统资源是有限的,为了降低资源消耗,提高系统的性能和稳定性,引入了线程池对线程进行统一的管理和监控,本文将详细讲解线程池的使用、原理。前言 由于系统资源是有限的,为了降低资源消耗,提高系统的性能和稳定性,引入了线程池对线程进行统一的管理和监控,本文将详细…

ctf_web

ctfshow web13 访问题目链接一看是一道文件上传题,上传文件进行测试 上传php会显示 error suffix 因此推测会检测格式 当文件字数超出一定字数时,显示 error file zise 常规操作就是访问 .php.bak 、.phps 、.swp等文件,看看有没有源码泄露 这道题访问 upload.php.bak 成功获…

顺序表的实现

顺序表的实现/******************************************************************************************************** * * file name: Zqh_顺序表.c * author : keyword2024@163.com * date : 2024/05/05 * function : 顺序表的增删改查 * note : 模板 * * Copy…

Servlet相关知识

什么是servlet? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创…

雷达效果

相位阵雷达效果一个简单思路: 在一个扇形范围内,用多个射线检测来每tick判断点击查看代码 #pragma once#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Components/SphereComponent.h" #include "MyActor.generat…