首页 > 其他分享 >链栈的接口设计

链栈的接口设计

时间:2024-04-25 15:01:01浏览次数:23  
标签:顺序 LKStack 接口 next 链栈 printf Push 设计 Top

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//指的是顺序栈中的元素的数据类型,用户可以根据需要进行修改
typedef int  DataType_t;

//构造记录顺序栈SequenceStack各项参数(栈底地址+栈容量+栈顶元素的下标)的结构体
typedef struct LinkStack
{
    DataType_t  		     data; //结点的数据域
	struct LinkStack	*next; //直接前驱的指针域

}LKStack_t;


//创建顺序表并对顺序栈进行初始化
LKStack_t * LKStack_Create(void)
{
	//1.利用calloc为链栈的管理结构体申请一块堆内存
	LKStack_t *Top = (LKStack_t *)calloc(1,sizeof(LKStack_t));

	if(NULL == Top)
	{
		perror("calloc memory for manager is failed");
		exit(-1); //程序异常终止
	}

	Top->next=NULL;
	
	return Top;
}

//创建新的结点,并对新结点进行初始化(数据?? + 指针域)
LKStack_t * LKStack_NewNode(DataType_t data)
{
	//1.创建一个新结点并对新结点申请内??
	LKStack_t *New = (LKStack_t *)calloc(1,sizeof(LKStack_t));
	if (NULL == New)
	{
		perror("Calloc memory for NewNode is Failed");
		return NULL;
	}

	//2.对新结点的数据域和指针域??2个)进行初始??,指针域指向结点自身,体现“循环??
	New->data = data;
	New->next = NULL;

	return New;
}

//判断顺序栈是否为空
bool LKStack_IsEmpty(LKStack_t *Top)
{
	return (Top->next==NULL) ? true : false;
}


//入栈
bool LKStack_Push(LKStack_t *Top, DataType_t Data)
{
    LKStack_t* Ptop=Top->next;
    LKStack_t *New = LKStack_NewNode(Data);
	//2.如果顺序栈有空闲空间,则把新元素添加到顺序栈的栈顶
	
    New->next=Ptop;
    Top->next=New;

	return true;
}


//出栈
DataType_t LKStack_Pop(LKStack_t *Top)
{
	DataType_t temp = 0;  //用于存储出栈元素的值
    LKStack_t* Ptop=Top->next;
	//1.判断顺序栈是否为空
	if ( LKStack_IsEmpty(Top) )
	{
		printf("LKStack is Empty!\n");
		return;
	}
	
	//2.由于删除了一个元素,则需要让顺序栈的栈顶元素下标-1
	temp=Ptop->data;
    Top->next=Ptop->next;

	return temp;
}


//遍历顺序表的元素
void LKStack_Print(LKStack_t *Top)
{
    LKStack_t* Ptop=Top;
	while(Ptop->next!=NULL)
    {
        Ptop=Ptop->next;
        printf("data=%d\n",Ptop->data);
    }
}


int main(int argc, char const *argv[])
{

	//1.创建顺序表
	LKStack_t * Top = LKStack_Create();
	

	//2.向顺序表中的尾部插入新元素
	printf("*********************************入栈********************************\n");
	LKStack_Push(Top,5);
	LKStack_Push(Top,2);
	LKStack_Push(Top,1);
	LKStack_Push(Top,4);
	LKStack_Push(Top,6);  


	// //3.遍历顺序表
	LKStack_Print(Top); // -- 5 2 1 4 6
	printf("\n");
	//4.向顺序表中的头部插入新元素
	printf("*********************************出栈********************************\n");
	printf("出栈元素为%d\n",LKStack_Pop(Top));
	printf("出栈元素为%d\n",LKStack_Pop(Top));
	printf("出栈元素为%d\n",LKStack_Pop(Top));
	printf("出栈元素为%d\n",LKStack_Pop(Top));
	printf("出栈元素为%d\n",LKStack_Pop(Top));  

	// //5.遍历顺序表
	LKStack_Print(Top); // --空
	printf("\n");

    //2.向顺序表中的尾部插入新元素
	printf("*********************************入栈********************************\n");
	LKStack_Push(Top,6);
	LKStack_Push(Top,4);
	LKStack_Push(Top,1);
	LKStack_Push(Top,2);
	LKStack_Push(Top,5);  


	// //3.遍历顺序表
	LKStack_Print(Top); // -- 6 4 1 2 5
	printf("\n");
	return 0;
}

标签:顺序,LKStack,接口,next,链栈,printf,Push,设计,Top
From: https://www.cnblogs.com/eon4051/p/18157731

相关文章

  • 双向循环链表实现插入、删除和遍历功能接口
    /************************************************************************************filename:004_双向循环链表.c*author:[email protected]*date:2024/04/25*function:设计双向循环链......
  • JS之调用百度地图接口进行打卡
    调用百度地图接口进行打卡1.在百度地图开放平台申请AK2.在index.html导入百度地图SDK(此AK值为假)<scripttype="text/javascript"src="https://api.map.baidu.com/api?v=2.0&ak=f029hEOpyCQnXySQsug94D1yUU0Yil"></script>3.新增coordTransform.js//定义一些常量varx_PI......
  • pcba方案开发——智能血氧仪解决方案研发设计
    智能血氧仪芯片是一种集成化的电子元件,主要用于测量人体血氧浓度。目前市场上的血氧仪芯片具有以下特点:1.高精度:血氧仪芯片采用专业的光学传感器,能够精确地测量人体血氧浓度。2.低功耗:血氧仪芯片通过优化电路设计和功耗管理,能够实现长时间的使用。3.便携式:血氧......
  • 数据库设计 外键设计 关联表查询 linq efcore
    数据库的设计实体之间的关系图实体EleOrderRowItem.cspublicclassEleOrderRowItem:EleEntity{publicstring?Xxx{get;set;}//外键:一个rowItem属于一个rowpubliclongRowId{get;set;}publicrequiredEleOrderRowRow{get;set;}}......
  • 记录一次责任链设计模式使用低级错误
    记录一次责任链设计模式使用低级错误目录记录一次责任链设计模式使用低级错误背景流程发现问题解决方案总结背景提供一个服务支持语音转写成文本,以及历史转写备份数据的简单服务。提供一个接口批量上传,一次最大1000条(分表)落库之后同时发送到消息队列并更新数据状态消费......
  • 双向循环链表的接口
    双向循环链表的接口头文件#include<stdbool.h>#include<stdio.h>#include<string.h>#include<stdlib.h>​```创建链表、节点//指的是双向循环链表中的结点有效数据类型,用户可以根据需要进行修改hjtypedefintDataType_t;//构造双向循环链表的结点,链表中所有结......
  • 七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
    前言上一章节我们引入BootstrapBlazorUI组件完成了EasySQLite后台界面的基本架子的搭建,本章节的主要内容是Blazor班级管理页面编写和接口对接。七天.NET8操作SQLite入门到实战详细教程第一天SQLite简介第二天在Windows上配置SQLite环境第三天SQLite快速入门......
  • 软件工程基础-实验一-原型设计-作家助手
    实验要求一:对比分析对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点。一丶墨刀墨刀是一款在线的产品设计协作软件,可以解决产设研团队中存在的项目管理权限不明、版本管理混乱、协作低效等诸多问题。优点:功能强大:可满足产品经理、设计师、开发在产品设......
  • 前端使用 Konva 实现可视化设计器(7)- 导入导出、上一步、下一步
    请大家动动小手,给我一个免费的Star吧~这一章实现导入导出为JSON文件、另存为图片、上一步、下一步。github源码gitee源码示例地址导出为JSON文件提取需要导出的内容getView(){//复制画布constcopy=this.render.stage.clone()//提取mainlayer......
  • 文本语音互相转换系统设计
    title:文本语音互相转换系统设计date:2024/4/2421:26:15updated:2024/4/2421:26:15tags:需求分析模块化设计性能优化系统安全智能化跨平台区块链第一部分:导论第一章:背景与意义文本语音互相转换系统的定义与作用文本语音互相转换系统是一种能够将文本信息......