• 栈-基本操作初始化,返回栈顶,出栈,入栈,判断是否空栈


    栈-基本操作初始化,返回栈顶,出栈,入栈,判断是否空栈

    C语言:

    #include <stdio.h> 
    #include <stdlib.h>
    
    #define STACK_INIT_SIZE 100        // 存储空间初始化分配量
    #define STACKINCREMENT 10          // 存储空间分配增量
    #define OVERFLOW -2 
    #define OK 1
    #define ERROR 0
    
    typedef int Status;
    typedef int SElemType;
    
    typedef struct{
    	SElemType * base;              // 在栈构造之前和销毁之后,base 的值为 NULL 
    	SElemType * top;               // 栈顶指针 
    	int stacksize;                 // 当前已分配的存储空间,以元素为单位 
    }SqStack;
    
    Status InitStack(SqStack &S)
    {
    	// 构造一个空栈 
    	S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    	if(!S.base)
    		exit(OVERFLOW);            // 存储分配失败 
    	S.top = S.base;
    	S.stacksize = STACK_INIT_SIZE;
    	return OK;	
    }
    Status GetTop(SqStack S, SElemType &e)
    {
    	// 若栈不空,则用 e 返回 S 的栈顶元素,并返回 OK ,否则返回 ERROR
    	if(S.top == S.base)
    		return ERROR;
    	e = *(S.top-1);
    	return OK;	  
    }
    Status Push(SqStack &S, SElemType e)
    {
    	// 插入元素 e 为新的栈顶元素
    	if(S.top - S.base >= S.stacksize){         // 栈满了,追加存储空间 
    		S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
    		if(!S.base)
    			exit(OVERFLOW);
    		S.top = S.base + S.stacksize;
    		S.stacksize += STACKINCREMENT;	
    	}
    	*S.top++ = e;
    	return OK; 
    }
    Status Pop(SqStack &S, SElemType &e)
    {
    	// 若栈不空,则删除 S 的栈顶元素, 用 e 返回其值,并返回 OK ,否则返回 ERROE
    	if(S.top == S.base)
    		return ERROR; 
    	e = *(--S.top);
    	return OK;
    }
    Status IsEmpty(SqStack S)
    {
    	// 若栈为空返回 OK, 否则返回 ERROR 
    	if(S.top == S.base)
    		return OK;
    	return ERROR;	
    }
    int main()
    {
    	SqStack stack;
    	InitStack(stack);         // 初始化栈 
    	
    	SElemType e = 88;
    	Push(stack, e);           // 将 e 压入栈 
    	
    	SElemType gete;
    	GetTop(stack, gete);      // 得到栈顶元素,用 gete 返回栈顶元素其值 
    	printf("%d
    ", gete);
    	
    	if(IsEmpty(stack))       // 判断栈是否为空 
    		printf("栈为空
    ");
    	else 
    		printf("栈不为空
    ");	
    		
    	SElemType pope;
    	Pop(stack, pope);        // 将栈顶弹出,用 pope 返回栈顶元素其值 
    	printf("%d
    ", pope);
    	
    	if(IsEmpty(stack)) 
    		printf("栈为空
    ");
    	else 
    		printf("栈不为空
    ");	
    	
    	return 0;
    }
    /* Code Running Results
    88
    栈不为空
    88
    栈为空
    */ 
    

    使用栈的具体事例:
    实现表达式中缀转后缀

  • 相关阅读:
    squid开多端口代理的心得
    用ssh跑pppd(最简单的linuxvpn)
    Asterisk1.2编译与安装
    E1 CE1 PRI BRI T1 的区别
    asterisk卡常见问题(收集整理)
    CCProxy+Eborder开透明代理详细设置(附图文)
    iptables+NAT+squid 透明代理上网实现方案
    asterisk积累命令
    MySQL Cluster的常见问题
    如何配置Silverlight4开发环境
  • 原文地址:https://www.cnblogs.com/jiaohuadehulike/p/14295023.html
Copyright © 2020-2023  润新知