您现在的位置是:群英 > 开发技术 > 编程语言
C语言中堆栈是什么意思,如何实现?
Admin发表于 2021-12-20 17:47:571805 次浏览

    这篇文章给大家分享的是C语言中堆栈的相关内容,一些新手可能对于什么是堆栈不是很了解,对此本文有很详细的介绍,对大家学习和理解C语言中堆栈会有一定的帮助,那么接下来感兴趣的朋友就跟随小编一起学习一下吧。

    一、何为堆栈?

        a.堆栈是一种特殊的线性表

        b.堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其不同点是:线性表允许在任意位置插入和删除数据元素,但堆栈只允许在固定一端进行插入和删除数据元素,所以栈又称为“先进后出”(FILO)或“后进先出”(LIFO)的线性表

        c.堆栈中允许进行插入和删除数据元素的一端称为栈顶,另一端称为栈底

        d.堆栈的插入操作通常称为进栈或入栈;堆栈的删除操作通常称为出栈或退栈

    二、思维导图

    三、代码

        1、顺序堆栈

    #include <stdio.h>
    typedef int DataType;
    #define MaxStackSize 64
    typedef struct
    {
    	DataType stack[MaxStackSize];
    	int top;
    }SeqStack;
    //初始化
    void StackInit(SeqStack *S)
    {
    	S->top = 0;
    }
    //判断是否栈空
    int StackIsEmpty(SeqStack S)
    {
    	if (S.top <= 0)
    		return 0;
    	else
    		return 1;
    }
    //入栈
    int StackPush(SeqStack *S, DataType x)
    {
    	if (S->top >= MaxStackSize)
    	{
    		printf("栈满,无法进栈!!!\n");
    		return 0;
    	}
    	else
    	{
    		S->stack[S->top] = x;
    		S->top++;
    		return 1;
    	}
    }
    //出栈
    int StackPop(SeqStack *S, DataType *x)
    {
    	if (S->top <= 0)
    	{
    		printf("堆栈已空,无法出栈!!!\n");
    		return 0;
    	}
    	else
    	{
    		S->top--;
    		*x = S->stack[S->top];
    		return 1;
    	}
    }
    //获取栈顶元素
    int StackGetTop(SeqStack S, DataType *x)
    {
    	if (S.top <= 0)
    	{
    		printf("堆栈已空!!!\n");
    			return 0;
    	}
    	else
    	{
    		*x = S.stack[S.top - 1];
    		return 1;
    	}
    }
    int main()
    {
    	SeqStack myStack;
    	int i, x;
    	StackInit(&myStack);
    	for (i = 0; i < 10; i++)
    		StackPush(&myStack, i + 1);
    	StackGetTop(myStack, &x);
    	printf("当前栈顶元素为:%d\n", x);
    	printf("依次出栈:");
    	while (StackIsEmpty(myStack))
    	{
    		StackPop(&myStack, &x);
    		printf("%d ", x);
    	}
    	system("pause");
    	return 0;
    }
    

        2、链式堆栈

    #include <stdio.h>
    #include <stdlib.h>
    typedef int DataType;
    typedef struct snode
    {
    	DataType data;
    	struct snode *next;
    }LSNode;
    //初始化
    void StackInit(LSNode **top)
    {
    	*top = (LSNode *)malloc(sizeof(LSNode));
    	(*top)->next = NULL;
    }
    //判断堆栈是否非空
    int StackIsEmpty(LSNode *top)
    {
    	if (top->next == NULL)
    		return 0;
    	else
    		return 1;
    }
    //入栈
    void StackPush(LSNode *top, DataType x)
    {
    	LSNode *p;
    	p = (LSNode *)malloc(sizeof(LSNode));
    	p->data = x;
    	p->next = top->next;
    	top->next = p;
    }
    //出栈
    int StackPop(LSNode *top, DataType *x)
    {
    	LSNode *p = top->next;
    	if (p == NULL)
    	{
    		printf("堆栈已空,删除错误!!!\n");
    		return 0;
    	}
    	top->next = p->next;
    	*x = p->data;
    	free(p);
    	return 1;
    }
    //获取栈顶元素
    int StackGetTop(LSNode *top, DataType *x)
    {
    	LSNode *p = top->next;
    	if (p == NULL)
    	{
    		printf("堆栈已空,取出错误!!!\n");
    		return 0;
    	}
    	*x = p->data;
    	return 1;
    }
    //释放内存空间
    void StackDestroy(LSNode **top)
    {
    	LSNode *p, *q;
    	p = *top;
    	while (p != NULL)
    	{
    		q = p;
    		p = p->next;
    		free(q);
    	}
    	*top = NULL;
    }
    int main()
    {
    	int i, x;
    	LSNode *top;
    	StackInit(&top);
    	for (i = 0; i < 10; i++)
    		StackPush(top, i + 1);
    	StackGetTop(top, &x);
    	printf("当前栈顶元素为%d\n", x);
    	printf("依次出栈:");
    	while (StackIsEmpty(top))
    	{
    		StackPop(top, &x);
    		printf("%4d", x);
    	}
    	StackDestroy(&top);
    	system("pause");
    	return 0;
    }
    

    总结

        关于C语言中堆栈的内容就介绍到这,上述示例具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助,想要了解更多堆栈的内容,大家可以关注其它的相关文章。

    文本转载自PHP中文网

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

    标签: C语言堆栈
    相关信息推荐
    2022-01-05 18:43:17 
    摘要:PHP中标量数据类型有哪些?PHP中标量数据类型有布尔型、字符串、整型和浮点型这四种。理解这几种数据类型并不难,接下来就给小编就给大家来讲讲他们的基础用法,文中的示例代码介绍得很详细,有需要的朋友可以参考。
    2022-06-21 17:12:23 
    摘要:本篇文章带大家了解一下如何使用IDEA开发Angular,简单介绍一下JetBrains IDEA中新建项目、运行项目的方法,希望对大家有所帮助!
    2022-06-02 17:22:10 
    摘要:php全局数组有9个:1、“$GLOBALS”,是由所有已定义的全局变量组成的数组;2、“$_SERVER”,是包含诸如头信息、路径和脚本位置的数组;3、“$_COOKIE”,由会话数据组成的数组;4、“$_GET”;5、“$_ENV”等。
    云活动
    推荐内容
    热门关键词
    热门信息
    群英网络助力开启安全的云计算之旅
    立即注册,领取新人大礼包
    • 联系我们
    • 24小时售后:4006784567
    • 24小时TEL :0668-2555666
    • 售前咨询TEL:400-678-4567

    • 官方微信

      官方微信
    Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
    增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
    免费拨打  400-678-4567
    免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
    微信公众号
    返回顶部
    返回顶部 返回顶部