zoukankan      html  css  js  c++  java
  • 数据结构之栈

    一、栈的定义

    所谓栈的本质也是一个线性表,只不过他具有进出,并且进出满足先进后出的原则。

    一种定义方式为数组定义方式,这种方式就要求我们开辟一个特定大小的数组,就不能节省空间。
    如下所示:

    #define MaxSize < 储存数据元素的最大个数>
    typedef struct{
    	ElementType Data[MaxSize];
    	int Top;//栈顶序号
    }Stack
    

    另一种方式为链表的定义方式,这种方式是以下一个元素地址作为传递的方式,这样就不用开辟一个很大的数组。
    如下所示:

    typedef struct Node{
    	ElementType Data;
    	struct Node *Next; 
    }LinkStack;
    LinkStack *Top;
    

    注意:此处的元素为栈顶指针。


    二、链式栈表的编写
    我们仅以链式栈表来编写栈表程序
    (1)堆栈初始化
    所谓堆栈初始化就是创建一个空的栈表
    需要申请一块空间内存,并且这个栈指向空

    LinkStack *CreatStack(void){
    	LinkStack *p;
    	p = (LinkStack *)malloc(sizeof(struct Node));//开辟一块空间
    	P->Next = NULL;
    	return p;
    }
    

    (2)判断栈是否为空
    这个函数只需要看栈顶指向的元素是否为空即可

    int IsEmpty(LinkStack *S){
    	return (s->next);//只需要看栈顶指向的地址是否为空,如果为空则栈为空
    	
    }
    

    (3)入栈
    就是将元素压栈进入表中。

    void Push(ElementType item,LinkStack *s){
    	struct Node *p;
    	p =(LinkStack *)malloc(sizeof(struct Node));
    	p->next = s->next;
    	p->Data = item;
    	s->next = p;
    }
    

    (4)出栈
    取出元素,取元素是从栈顶取元素。

    ElementType Pop(LinkStack *S){
    	struct Node *p;
    	ElementType data = NULL;
    	//首先判断栈表是否为空
    	if(IsEmpty(s)){
    		printf("堆栈空");
    	}
    	else{
    		p = s->next;
    		s->next = p->next;//栈顶切换
    		data = p->Data;数据保存
    		free(p);//释放内存
    	}	
    	return data;
    }
    

    三、应用
    栈的应用一般用在函数递归中,栈的使用可以节省空间。

     (后续添加)

  • 相关阅读:
    软件工程实践2019第五次作业
    登录页面JS前端加密绕过
    《软件架构设计》阅读笔记*part1
    软件架构师
    软件质量属性
    架构漫谈读后感
    TensorFlow K近邻算法(基于MNIST数据集)
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    机器学习十讲——第十讲学习总结
    机器学习十讲——第九讲学习总结
  • 原文地址:https://www.cnblogs.com/flyingjun/p/5173451.html
Copyright © 2011-2022 走看看