首页后端开发其他后端知识C语言中堆栈是什么意思,如何实现?

C语言中堆栈是什么意思,如何实现?

时间2024-03-29 01:16:03发布访客分类其他后端知识浏览1519
导读:这篇文章给大家分享的是C语言中堆栈的相关内容,一些新手可能对于什么是堆栈不是很了解,对此本文有很详细的介绍,对大家学习和理解C语言中堆栈会有一定的帮助,那么接下来感兴趣的朋友就跟随小编一起学习一下吧。 一、何为堆栈? a.堆栈是一种特...

这篇文章给大家分享的是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中文网

    声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


    若转载请注明出处: C语言中堆栈是什么意思,如何实现?
    本文地址: https://pptw.com/jishu/655323.html
    C语言中怎样实现类型转换,有什么方式? C++构造函数的作用是什么,怎样使用?

    游客 回复需填写必要信息