首页 > 其他分享 >顺序栈的实现

顺序栈的实现

时间:2024-05-06 23:00:12浏览次数:16  
标签:SeqStack return 实现 Top int Manager 顺序

/********************************************************************************************************
*
*	file name:	Zqh_栈实现.c
* 	author	 :	[email protected]
* 	date	 :	2024/05/05
* 	function :	该程序实现顺序栈元素的增删改查	
*	note	 :	模板
*	
*  Copyright (c)  2023-2024   [email protected]    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;		//由于顺序栈为空,则栈顶元素的下标初值为-1
	
	return 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.由于删除了一个元素,则需要让顺序栈的栈顶元素下标-1
	temp = 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;
}

标签:SeqStack,return,实现,Top,int,Manager,顺序
From: https://www.cnblogs.com/kencszqh/p/18176148

相关文章

  • 双向循环链表的实现
    /********************************************************************************************************** filename: Zqh_链表.c* author : [email protected]* date : 2024/05/05* function: 链表的增删改查* note : 模板* *Copyright(c)2023-202......
  • 如何用递归实现二叉搜索树的增删改查
    点击查看代码/**@Author:WangYiMing*@Date:2024-04-2323:37:21*@LastEditors:WangYiMing*@LastEditTime:2024-04-2618:22:35*/#include<stdio.h>#include<stdlib.h>///@brief二叉树基础结构typedefstructbinary_tree_node{intdata;stru......
  • 双向链表实现
    /********************************************************************************************************** filename: Zqh_链表.c* author : [email protected]* date : 2024/05/05* function: 链表的增删改查* note : 模板* *Copyright(c)2023-202......
  • 单向循环链表的实现
    /********************************************************************************************************** filename: Zqh_链表.c* author : [email protected]* date : 2024/05/05* function: 链表的增删改查* note : 模板* *Copyright(c)2023-202......
  • 顺序表的实现
    /********************************************************************************************************** filename: Zqh_顺序表.c* author : [email protected]* date : 2024/05/05* function: 顺序表的增删改查* note : 模板* *Copyright(c)2023......
  • HarmonyOS 实现下拉刷新,上拉加载更多
    组件介绍PullToRefreshList允许用户通过下拉动作来刷新列表内容,以及通过上拉动作来加载更多的数据。组件内部封装了滚动监听、状态管理和动画效果,使得开发者可以轻松集成到自己的项目中。1.实现思路封装成可复用的公共控件:将下拉刷新和上拉加载更多功能封装为一个可复用的组......
  • 在英特尔至强 CPU 上使用 Optimum Intel 实现超快 SetFit 推理
    在缺少标注数据场景,SetFit是解决的建模问题的一个有前途的解决方案,其由HuggingFace与Intel实验室以及UKPLab合作共同开发。作为一个高效的框架,SetFit可用于对SentenceTransformers模型进行少样本微调。SetFit仅需很少的标注数据就能达到较高的准确率,例如,在使用3-......
  • docker-compose+nginx实现服务不中断更新
    思路是写一个脚本,docker-composescale扩容,然后重写nginx配置文件,刷新负载均衡nginx重写的配置文件,文件名service,里面只有upstream,例如:upstreame-chatbot-server-dev{server0.0.0.0:8080;server0.0.0.0:8081;}脚本使用方法:./rollupdate.sh--service=test-serve......
  • 以数组为基础实现循环队列
    /*****************************************************************name;CirQueue_Create*function:创建循环队列*parameter;unsighedintsize*ReValue;CirQueue_t**author;小北blog*attention;*date;2024.04.26*history;*version;*Copyright(c)......
  • WPF上位机 - 实现TIA Wincc中的输入输出域
    在TIAWincc中输入输出域可以显示PLC中的变量,同时可以改变PLC中的变量,而在上位机中,使用多线程实时读取数据,在输入数据的时候可能PLC数据改变使得上位机数据同时改变。所以需要在文本框获取到焦点的时候断开绑定,失去焦点的时候重新绑定数据。//view代码<TextB......