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
  • 相关阅读:
    【WPF】WPF Behavior 行为 实现鼠标移入按钮自动旋转
    cgo遇到的几个坑
    工程师什么时机最合适选择跳槽?
    在 ASP.NET Core 中自动启用 CAP 事务
    轻量级压力测试工具http_load
    纯C语言AES-128(可修改)-ECB模式加密-zero模式
    内存字符串暴力搜索定位代码
    windbg配置网络版双机调试
    安装docker compose
    linux安装基础软件包
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5357228.html
Copyright © 2011-2022 走看看