• 栈——数组实现


    引言:

         

           使用链表实现栈存在“对malloc和free的调用开销昂贵”的缺点,特别是与指针操作的例程相比尤其如此。利用数组实现栈能够避免了指针。但它的缺点是可能存在空间的浪费。


    分析描写叙述:


           数组栈的结点元素。

    #ifndef ERROR
    #define ERROR (0)
    #endif
    #ifndef OK
    #define OK	(!ERROR)
    #endif
    
    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT  10
    
    typedef	int SElemType;
    typedef struct SqStack{
    	SElemType	*base;	
    	SElemType	*top;	
    	int			stacksize;
    }SqStack, *pStack;
    pStack S;

               栈的初始化。

    pStack InitStack(pStack S)
    {
    	S = (pStack)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    	if(S == NULL){
    		return ERROR;
    	}
    	S->base = (SElemType *)S;
    	S->top = S->base;
    	S->stacksize = STACK_INIT_SIZE;
    
    	return S;
    }

            入栈操作。

    pStack Push(pStack S, SElemType e)
    {
    	if((S->top - S->base) >= S->stacksize){
    		S->base = (SElemType *)realloc(S, (S->stacksize + STACKINCREMENT)*sizeof(SElemType));
    		if(S->base == NULL)	
    				return ERROR;
    		S->top = S->base + S->stacksize;
    		S->stacksize += STACKINCREMENT;
    	}
    	*S->top++ = e;
    	return S;
    }

             出栈操作。

    SElemType Pop(pStack S)
    {
    	if(S->top == S->base)
    			return 0;
    	return *(--S->top);
    }

              取栈顶元素。

    SElemType GetTop(pStack S)
    {
    	if(S->top == S->base)
    			return ERROR;
    	return *(S->top - 1);
    }

             求栈的长度。

    int GetLength(pStack S)
    {
    	int length = 0;
    	if(S->top == S->base)
    			return 0;
            pStack Tmp = S;
    	while(Tmp->top-- != Tmp->base)
    			length++;
    	return length;
    }


  • 相关阅读:
    哈希值
    webpack配置(二)
    点击input选中文本
    height:calc(100%
    -webkit-overflow-scrolling
    字符串转数组
    gulp报错160
    webpack配置(一)
    移动端ios中click点击失效
    Spring定时器Quartz的用法
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5200557.html
Copyright © 2020-2023  润新知