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;
    }
    

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

     (后续添加)

  • 相关阅读:
    DOM(九)使用DOM设置文本框
    DOM(八)使用DOM控制表单
    DOM(七)使用DOM控制表格
    Javascript制作伸缩的二级菜单
    Javascript屏蔽鼠标的右键的两种方法。
    DOM(六)事件类型
    DOM(五)事件对象
    DOM(四)事件流
    DOM(三)使用DOM + Css
    Javascript一个在页面内追加元素的小例子
  • 原文地址:https://www.cnblogs.com/flyingjun/p/5173451.html
Copyright © 2011-2022 走看看