当前位置 博文首页 > L_add的博客:栈

    L_add的博客:栈

    作者:[db:作者] 时间:2021-08-27 12:54

    1.栈的概念

    栈:一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循LIFO(Last in First out)的原则
    压栈:栈的插入操作叫做压栈/进栈/入栈,入数据在栈顶
    出栈:栈的删除操作叫出栈。出数据也在栈顶
    在这里插入图片描述

    2、栈的实现

    1. 创建
    //用数组的方式实现栈
    #pragma once
    #include <stdio.h>
    #include <stdbool.h>
    #include <assert.h>
    #include <stdlib.h>
    typedef int STDataType;
    typedef struct Stack
    {
    
    	STDataType* a;
    	int top;//栈顶
    	int capacity;//容量,方便增容
    }Stack;
    
    
    
    
    
    

    2.初始化

    #include "SeqStack.h"
    void StackInit(Stack* s)
    {
    	/*assert(s);
    	s->a = NULL;
    	s->top = 0;
    	s->capacity = 0;*/
    	s->a = (STDataType*)malloc(sizeof(STDataType)* 4);
    	s->top = 0;
    	s->capacity = 4;
    }//初始化
    
    1. 销毁
    void StackDestory(Stack* s)
    {
    	assert(s);
    	free(s->a);
    	s->a = NULL;
    	s->capacity = s->top = 0;
    }//销毁
    
    1. 入栈
    oid StackPush(Stack* s, STDataType x)//性质决定在栈顶出入数据
    {
    	assert(s);
    	if (s->top == s->capacity)
    	{
    		STDataType* tmp =(STDataType*)realloc(s->a,sizeof(STDataType)*s->capacity * 2);
    		if (tmp == NULL)
    		{
    			printf("realloc fail\n");
    			exit(-1);
    		}
    		s->a = tmp;
    		s->capacity *= 2;
    	}
    	s->a[s->top] = x;
    	s->top++;
    }//入栈
    
    1. 出栈
    STDataType StackPop(Stack* s)
    {
    	assert(s);
    	assert(!StackEmpty(s));
    	return s->a[s->top - 1];
    
    }//出栈
    
    1. 返回栈顶元素
    STDataType StackTop(Stack* s)
    {
    	assert(s);
    	assert(!StackEmpty(s));
    	return s->a[s->top - 1];
    }//返回栈顶元素
    
    
    1. 判断栈是否为空
    bool StackEmpty(Stack* s)
    {
    	//空返回1,非空返回0
    	assert(s);
    	return s->top == 0;
    }//判断是否为空
    
    
    1. 查看栈中元素有多少
    int StackSize(Stack* s)
    {
    	assert(s);
    	return s->top;
    }//栈中元素有多少
    
    cs
    下一篇:没有了