zoukankan      html  css  js  c++  java
  • 数据结构之栈(3)——链栈

    前面经说过,根据存储结构的不同,将栈分为顺序栈和链栈

    链栈按照链式存储结构存储

    链栈原理和理解

    由于栈的删除和插入操作仅限制在表头进行,所以链表的表头指针(指向头结点)就作为栈顶指针(便于方便直接使用带头结点的链表)

    因此,若top(表头指针,栈顶指针)->next=NULL,则链栈为空

    整个理解过程可理解为头插法

    链栈的定义

    typedef char ElemType;
    typedef struct Node
    {
    	ElemType data;
    	struct Node *next;
    }LinkStackNode,*LinkStack;
    

      

    LinkStack表示栈顶指针(指向头结点),LinkStackNode表示栈的每个节点,每个节点的data域表示数据元素,next域指向下一个节点

    链栈的初始化:

    //链栈的初始化 
    void Init(LinkStack top)
    {
    	top->next=NULL;
    }
    

      头结点下一个为空

    链栈的入栈操作:不需要担心是否发生上溢

    //入栈操作
    bool PushStack(LinkStack top,ElemType x)
    {
    	LinkStackNode *temp;
    	temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));
    	if(temp==NULL)
    	return false;
    	else
    	{
    		temp->data=x;
    		temp->next=top->next;
    		top->next=temp;
    		free(temp);	
    		return true;
    	}
    	
    }
    

     由于采用了链式存储的方式,不需要担心是否上溢,注意temp要申请内存空间并且不能释放!!!!!

    链表的出栈操作

    //出栈操作
    bool PopStack(LinkStack top,ElemType* e)
    {
    	LinkStackNode* temp;
    	temp=top->next;
    	if(temp==NULL)
    	return false;
    	else
    	{
    	
    		*e=temp->data;
    		top->next=temp->next;
    		free(temp);
    		return true;
    	
    	}
    	
    } 
    

      

    注意判断是否为空,并且注意不要重复申请内存空间,并记得释放内存(temp)

    亲爱的听众朋友我是你的代班DJ
  • 相关阅读:
    Zend Guard 7 , Zend Guard Loader处理PHP加密
    [转]pHP源码加密方法调查
    使用USB Key(加密狗)实现身份认证
    4*4行列式矩阵键盘
    HDU-2546-饭卡
    HDU-2073-无限的路
    HDU-2065-"红色病毒"问题
    HDU-2063-过山车
    HDU-2060-Snooker
    HDU-2056-Rectangles
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5357228.html
Copyright © 2011-2022 走看看