• 数据结构--栈


    一、顺序栈

    #include
    
    using namespace std;//使用std命名空间,省略后续代码中得到std::前缀
    
    #define OK 1//定义一个宏,使用OK表示操作成功
    #define ERROR 0//定义一个宏。使用ERROR表示操作失败
    #define OVERFLOW -2//定义宏,表示溢出操作
    #define MAXSIZE 100//定义宏,表示线性表可能得最大空间
    
    typedef int Status;//重命名为status用于表示函数的返回状态
    typedef int ElemType;//重命名为ElemType用于表示线性表数据元素类型
    
    
    typedef struct{
    	ElemType data[MAXSIZE];
    	int top;
    }SqStack;
    
    /**
     * @brief 初始化 
     * 
     * @param s 
     * 
     * @return 
     **/
    Status init(SqStack *s){
    	s->top=0;
    	return OK;
    }
    
    /**
     * @brief 入栈 
     * 
     * @param s 
     * @param e 
     * 
     * @return 
     **/
    Status push(SqStack *s,ElemType e){
    	if(s->top==MAXSIZE) return ERROR;
    	s->data[s->top]=e;
    	s->top++;
    	return OK;
    }
    
    /**
     * @brief 出栈 
     * 
     * @param s 
     * @param e 
     * 
     * @return 
     **/
    Status pop(SqStack *s,ElemType *e){
    	if(s->top==0){
    		//TODO
    		return ERROR;
    	}
    	s->top--;
    	*e=s->data[s->top];
    	return OK;
    }
    
    /**
     * @brief 取栈顶元素 
     * 
     * @param s 
     * 
     * @return 
     **/
    ElemType GetElem(SqStack s){
    	return s.data[s.top-1];
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    二、链栈

    #include
    #include
    using namespace std;//使用std命名空间,省略后续代码中得到std::前缀
    
    #define OK 1//定义一个宏,使用OK表示操作成功
    #define ERROR 0//定义一个宏。使用ERROR表示操作失败
    #define OVERFLOW -2//定义宏,表示溢出操作
    
    typedef int Status;//重命名为status用于表示函数的返回状态
    typedef int ElemType;//重命名为ElemType用于表示线性表数据元素类型
    
    typedef struct StackNode{
    	ElemType data;
    	struct StackNode *next;
    }StackNode,*LinkStack;
    
    /**
     * @brief 初始化 
     * 
     * @param linkstack 
     * 
     * @return 
     **/
    Status init(LinkStack &linkstack){
    	linkstack = new StackNode;
    	linkstack->next=NULL;
    	return OK;
    }
    
    /**
     * @brief 入栈 
     * 
     * @param l 
     * @param e 
     * 
     * @return 
     **/
    Status push(LinkStack &l,ElemType e){
    	StackNode *p=new StackNode;
    	p->data=e;
    	p->next=l;
    	l=p;
    	return OK;
    }
    
    /**
     * @brief 出栈 
     * 
     * @param l 
     * @param e 
     * 
     * @return 
     **/
    Status pop(LinkStack &l,ElemType &e){
    	if(l->next==NULL){
    		//TODO
    		return ERROR;
    	}
    	e=l->data;
    	StackNode *p;
    	p=l;
    	l=p->next;
    	delete p;
    	return OK;
    }
    
    /**
     * @brief 取栈顶 
     * 
     * @param l 
     * 
     * @return 
     **/
    ElemType GetElem(LinkStack l){
    	if(l->next!=NULL){
    		//TODO
    		return l->data;
    	}
    	return ERROR;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
  • 相关阅读:
    计算机毕业设计JavaWeb端校园报修系统(源码+系统+mysql数据库+lw文档)
    Linux系统了解 Samba服务器配置的工作流程
    SystemVerilog Assertions应用指南 Chapter1.29“ disable iff构造
    hadoop
    blender 场景灯光基础设置
    【JavaSpring】Aop切入点表达式
    openwrt篇 路由器上写cname-01
    域名服务:域名迁移
    2022-08-02~04 第四小组 修身课 学习笔记(every day)
    leetcode-200. 岛屿数量
  • 原文地址:https://blog.csdn.net/m0_46363470/article/details/134342509