当前位置: 首页 > news >正文

链式栈讲解

文章目录

  • 🍊自我介绍
  • 🍊链式栈
    • 入栈和出栈
    • linkstack.h
    • linkstack.c


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。


🍊链式栈

概念:
  链式栈:插入操作和删除操作均在链表头部进行,链表尾部就是栈底,栈顶指针就是头指针。
图形:
在这里插入图片描述
链式栈的本质:栈头 + 不带头结点的链表

设计说明:
  先设计结点类型,再设计栈头类型;top保存的是结点首地址.

结点设计和栈头设计代码

typedef char data_t;//结点类型
typedef struct node
{data_t data;struct node *next;}linknode_t;//栈头类型
typedef struct
{//栈顶指针linknode_t *top;//记录当前栈中元素个数int n;
}linkstack_t;

入栈和出栈

linkstack.h

#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__#include <stdio.h>
#include <string.h>
#include <stdlib.h>typedef char data_t;//结点类型
typedef struct node
{data_t data;struct node *next;}linknode_t;//栈头类型
typedef struct
{//栈顶指针linknode_t *top;//记录当前栈中元素个数int n;
}linkstack_t;extern linkstack_t *create_empty_linkstack();
extern int is_empty_linkstack(linkstack_t *s);
extern void push_linkstack(linkstack_t *s,data_t data);
extern data_t pop_linkstack(linkstack_t *s);
extern data_t pop_linkstack(linkstack_t *s);#endif

linkstack.c

#include "linkstack.h"//创建空的链式栈——为栈头在堆区分配空间
linkstack_t *create_empty_linkstack()
{linkstack_t *s = NULL;s = (linkstack_t *)malloc(sizeof(linkstack_t));if(NULL == s){printf("malloc is fail!\n");return NULL;}memset(s,0,sizeof(linkstack_t));return s;
}//判断栈是否为空
int is_empty_linkstack(linkstack_t *s)
{return s->top == NULL ? 1 : 0;
}//入栈
void push_linkstack(linkstack_t *s,data_t data)
{linknode_t *temp = NULL;temp = (linklist_t *)malloc(sizeof(linknode_t));if(NULL == temp){printf("malloc is fail!\n");return ;}temp->data = data;//插入数据类似于链表的头插法temp->next = s->top;s->top =temp;//更新n的值s->n ++;return ;
}//出栈
data_t pop_linkstack(linkstack_t *s)
{linknode_t *temp = NULL;data_t data;//保存要删除结点的地址temp = s->top;//取出数据data = temp->data;//更新指针信息s->top = temp->next;//释放temp结点free(temp);temp = NULL;//更新n的值s->n --;return data;}//输出栈顶元素的值
data_t get_top_data(linkstack_t *s)
{return s->top->data;
}

main.c

#include "linkstack.h"int main()
{linkstack_t *s = NULL;data_t arry[] = {'a','n','i','h','c'};int i;s = create_empty_linkstack();for(i = 0;i < sizeof(arry)/sizeof(arry[0]);i++){push_linkstack(s,arry[i]);}printf("Top data = %c\n",get_top_data(s));while(!is_empty_linkstack(s)){printf("%c",pop_linkstack(s));}printf("\n");return 0;
}

http://www.mrgr.cn/news/30641.html

相关文章:

  • id 命令:输出用户的UID、GID和属组
  • C语言中的一些小知识(二)
  • 代码随想录Day50|图论Part01,leetcode题目:98. 所有可达路径
  • 科创孵化昌平,创新创业求发展
  • 专题六_模拟_算法详细总结
  • 计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
  • 结构体易忘点
  • solidwork剪裁实体
  • Ubuntu22.04关闭631端口的方法
  • 【CSS Tricks】一种基于AV1视频格式的现代图像格式-AVIF
  • PyCharm和VS Code 安装通义灵码,可本地安装包安装,解决插件安装不上问题
  • Linux内核结构
  • Python语法(一)——顺序、条件和循环语句
  • 【macOS】【zsh报错】zsh: command not found: python
  • InternVL 微调实践闯关任务
  • vue3常用的组件间通信
  • python AutoGen接入开源模型xLAM-7b-fc-r,测试function calling的功能
  • springsecurity+jwt实现前后端分离认证授权
  • WPF入门教学六 Grid布局进阶
  • Hive基本原理与数据开发