返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中栈的结构和函数接口的使用示例
  • 784
分享到

C语言中栈的结构和函数接口的使用示例

C语言栈的结构C语言栈的函数接口 2023-02-14 12:02:36 784人浏览 安东尼
摘要

目录一、栈的结构二、栈的函数接口1. 初始化和销毁2. 入栈和出栈3. 访问栈顶元素以及判空和元素个数一、栈的结构 栈:一种操作受限的线性表,只允许在线性表的一端进行插入和删除操作,

一、栈的结构

栈:一种操作受限的线性表,只允许在线性表的一端进行插入和删除操作,进行插入删除的一端称作栈顶,另一端称之为栈底

通过动态顺序表的实现,可以发现在对数组进行尾插尾删时效率很高, 因此栈可以用数组实现,将数组的尾部作为栈顶, 结构如下:

通过单链表的实现,可以发现在对链表进行头插头删时效率很高,因此也可以用链表来实现,将单链表的头结点作为栈顶,结构如下:

综合考虑:数组的实现方法更优,本篇以数组的方式介绍栈的结构和函数接口

//栈的元素类型
typedef int StackDataType;
//栈的结构
typedef struct Stack
{
	StackDataType* a;	//存放元素的数组
	int top;	//指向栈顶元素的下一个位置
	int capacity;	//容量
}Stack;

二、栈的函数接口

1. 初始化和销毁

初始时给栈分配一些空间,并将 top置为 0,代表指向栈顶元素的下一个位置

初始化函数如下:

void StackInit(Stack* ps)
{
	assert(ps);
	//开辟空间
	ps->a = (StackDataType*)malloc(sizeof(StackDataType) * 4);
	if (ps->a == NULL)
	{
		perror("malloc");
		exit(-1);
	}
	ps->top = 0;
	ps->capacity = 4;
}

栈是动态开辟的,不用时需要销毁

销毁函数如下:

void StackDestroy(Stack* ps)
{
	assert(ps);
	free(ps->a);
	ps->a = NULL;
	ps->top = 0;
	ps->capacity = 0;
}

2. 入栈和出栈

入栈:在栈顶插入元素,当空间不够时需要扩容

入栈函数如下:

void StackPush(Stack* ps, StackDataType x)
{
	assert(ps);
	//空间不够时,需要扩容
	if (ps->top == ps->capacity)
	{
		StackDataType* tmp = (StackDataType*)realloc(ps->a, ps->capacity * 2 * sizeof(StackDataType));
		if (tmp == NULL)
		{
			perror("realloc");
			exit(-1);
		}
		ps->a = tmp;
		ps->capacity *= 2;
	}
	//top 指向栈顶元素的下一个位置,因此 top 先插入数据,然后再自增
	ps->a[ps->top] = x;
	ps->top++;
}

出栈:删除栈顶元素

出栈函数如下:

void StackPop(Stack* ps)
{
	assert(ps);
	//栈为空时不能删除,这里直接调用判空函数
	assert(!StackEmpty(ps));	
	ps->top--;
}

3. 访问栈顶元素以及判空和元素个数

返回栈顶元素函数如下:

StackDataType StackTop(Stack* ps)
{
	assert(ps);
	//栈为空时不能取栈顶元素,这里直接调用判空函数
	assert(!StackEmpty(ps));
	//top 指向栈顶元素的下一个,所以需要-1
	return ps->a[ps->top - 1];
}

判空函数如下:

bool StackEmpty(Stack* ps)
{
	assert(ps);
	return ps->top == 0;
}

元素个数函数如下:

size_t StackSize(Stack* ps)
{
	assert(ps);
	//top 即为元素个数
	return ps->top;
}

到此这篇关于C语言中栈的结构和函数接口的使用示例的文章就介绍到这了,更多相关C语言栈的结构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中栈的结构和函数接口的使用示例

本文链接: https://lsjlt.com/news/196009.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言中栈的结构和函数接口的使用示例
    目录一、栈的结构二、栈的函数接口1. 初始化和销毁2. 入栈和出栈3. 访问栈顶元素以及判空和元素个数一、栈的结构 栈:一种操作受限的线性表,只允许在线性表的一端进行插入和删除操作,...
    99+
    2023-02-14
    C语言栈的结构 C语言栈的函数接口
  • C语言中队列的结构和函数接口的使用示例
    目录一、队列的结构二、队列的函数接口1. 初始化和销毁2. 入队和出队3. 访问队头和队尾元素4. 判空和元素个数一、队列的结构 队列:一种操作受限的线性表,只允许在线性表的一端进行...
    99+
    2023-02-14
    C语言队列结构 C语言函数接口
  • C语言编程数据结构的栈和队列
    目录栈数组实现标题全部代码Stack_array.cStack_array.h初始化数组栈满栈后扩容是否为空栈压栈和退栈链表实现stack_chain.hstack_chain.c整...
    99+
    2024-04-02
  • C语言中结构体和共用体的示例分析
    这篇文章给大家分享的是有关C语言中结构体和共用体的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、实验目的掌握结构体类型变量的定义和使用;掌握结构体类型数组的概念和应用;掌握链表的概念,初步学会对链表进...
    99+
    2023-06-20
  • GO语言中接口和接口型函数的具体使用
    目录前言GO语言中的接口怎么用?使用函数类型实现接口有何好处?GO源码例子前言 今天在编码中,看到了一个非常经典的接口用法如下,于是查阅了相关资料,发现此种写法为接口型函数,本文对此...
    99+
    2023-03-09
    GO语言接口 GO语言接口型函数
  • Go语言函数、结构体、方法和接口怎么用
    本篇内容介绍了“Go语言函数、结构体、方法和接口怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 函数Go语言的函数属于“一等公民”...
    99+
    2023-06-30
  • 基础使用和示例:C语言中scanf函数
    C语言中scanf函数的基本用法与示例 简介:在C语言中,scanf函数是一种常用的输入函数,用于从标准输入设备(通常是键盘)获取数据,并把数据存储到变量中。本文将详细介绍scanf函...
    99+
    2024-02-25
    - 示例 - c语言 c语言编程
  • C语言数据结构中的栈该怎么理解
    这期内容当中小编将会给大家带来有关C语言数据结构中的栈该怎么理解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。栈的链式实现主要内容(1) 栈包含7个元素,依次是67,3,88,6,1,7,0,采用尾插入法...
    99+
    2023-06-22
  • C语言中的结构体内嵌函数如何使用
    今天小编给大家分享一下C语言中的结构体内嵌函数如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C语言的结构体内嵌函数看...
    99+
    2023-07-05
  • C语言中的putchar函数示例
    目录putchar函数介绍:搭建环境:函数原型:讲解putchar函数:putchar的返回值:总结:putchar函数介绍: putchar函数函数几乎是在整个C语言中最没有知名度...
    99+
    2022-12-08
    C语言putchar函数 putchar函数
  • C语言中的结构体内嵌函数用法
    目录C语言的结构体内嵌函数1.内嵌函数定义举例:经过真实测试2.内嵌函数的个人理解结构体嵌套函数指针解释总结C语言的结构体内嵌函数 看门见山 1.内嵌函数定义举例:经过真实测试 在函...
    99+
    2023-02-24
    C语言结构体 C语言函数 结构体内嵌函数
  • GO语言中接口和接口型函数如何使用
    这篇文章主要讲解了“GO语言中接口和接口型函数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GO语言中接口和接口型函数如何使用”吧!// A Getter&nbs...
    99+
    2023-07-05
  • C语言数据结构进阶之栈和队列的实现
    目录栈的实现:一、栈的概念和性质二、栈的实现思路三、栈的相关变量内存布局图四、栈的初始化和销毁五、栈的接口实现:1.入栈2.出栈3.获取栈顶的数据4.获取栈的元素个数5.判断栈是否为...
    99+
    2024-04-02
  • C语言编程数据结构栈与队列的全面讲解示例教程
    目录一、栈的表示和实现1栈的概念和结构2栈的初始化3压栈(栈顶插入一个数据)4出栈(栈顶删除一个数据)5取栈顶元素6取栈顶元素7判断栈是否为空二、队列的表示和实现1队列的概念及结构2...
    99+
    2024-04-02
  • C语言如何实现通用数据结构中的通用椎栈
    今天就跟大家聊聊有关C语言如何实现通用数据结构中的通用椎栈,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为大家分享了C语言实现通用数据结构之通用椎栈的具体代码,具体内容如下这是在通用...
    99+
    2023-06-21
  • c语言malloc函数的用法示例和意义
    目录malloc函数原型malloc函数头文件malloc函数返回值malloc函数使用注意事项malloc函数使用形式free函数当我们需要做一个成绩管理系统,人数可能为全校学生,...
    99+
    2022-12-08
    c语言malloc函数用法 malloc函数作用 malloc函数详解 free函数详解
  • C语言数据结构之绪论的示例分析
    小编给大家分享一下C语言数据结构之绪论的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!绪论什么是数据结构?不同于计算机操作培训,注意与程序设计的区别。Ex...
    99+
    2023-06-20
  • JS中数据结构之栈的示例分析
    这篇文章给大家分享的是有关JS中数据结构之栈的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且...
    99+
    2024-04-02
  • C语言中使用结构体计算内存占用的示例分析
    小编给大家分享一下C语言中使用结构体计算内存占用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!    c语言中结构体使用是非常广泛的,但是结构体有一个问题,就是如果开头的字段属性是字符类型(c...
    99+
    2023-06-20
  • C语言中函数参数的入栈顺序
    这篇文章主要介绍“C语言中函数参数的入栈顺序”,在日常操作中,相信很多人在C语言中函数参数的入栈顺序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中函数参数的入栈顺序”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作