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

数据结构-栈-004

1链栈

1.1栈结点结构体定义

/*定义一个数据结构*/
typedef struct student
{char name[32];char sex;int age;
}DATA_TYPE;
/*定义一个栈结点*/
typedef struct stack_node
{DATA_TYPE data;//数据域struct stack_node *pnext;//指针域
}STACK_NODE;

1.2栈顶结点结构体定义

/*定义一个栈顶结点*/
typedef struct stack_top
{STACK_NODE *ptop;//栈顶结点指针域int clen;//栈顶结点数据域-栈结点数
}STACK_TOP;

1.3创建栈顶结点

/*==========创建栈顶结点(创建一个空栈)==========*/
STACK_TOP *create_stack_top(void)
{STACK_TOP *stack_top=NULL;/*申请一个栈顶结点空间*/stack_top=malloc(sizeof(STACK_TOP));if(NULL==stack_top){perror("fail to malloc");return NULL;}/*栈顶结点成员初始化*/stack_top->ptop=NULL;stack_top->clen=0;return stack_top;
}

1.4创建栈结点

/*==========创建一个新的栈结点==========*/
STACK_NODE *create_stack_new_node(DATA_TYPE data)
{STACK_NODE *stack_node=NULL;/*申请一个栈结点空间*/stack_node=malloc(sizeof(STACK_NODE));if(NULL==stack_node){perror("fail to malloc");return NULL;}/*栈结点成员初始化*/stack_node->data=data;stack_node->pnext=NULL;//思考1:这里直接初始化为NULL,还是继承栈顶的ptop?return stack_node;
}

1.5判断非空栈

/*==========判断是否为空栈==========*/
int is_empty_stack(STACK_TOP *pstack)
{return NULL==pstack->ptop;
}

1.6入栈

/*==========入栈-头插法==========*/
int push_stack(STACK_TOP *pstack,STACK_NODE *pnode)
{if(is_empty_stack(pstack)){pstack->ptop=pnode;//更新栈顶指针域}else{pnode->pnext=pstack->ptop;//初始化新的栈结点指针域pstack->ptop=pnode;//更新栈顶指针域}pstack->clen++;//更新栈顶结点数据域return 0;
}

1.7出栈

1.8遍历栈

/*==========遍历栈==========*/
void stack_for_each(STACK_TOP *pstack,void (*pfun)(STACK_NODE *))
{STACK_NODE *ptmp=NULL;ptmp=pstack->ptop;//初始化栈结点类型的中间指针变量为栈首while(1){if(NULL==ptmp){break;}pfun(ptmp);ptmp=ptmp->pnext;}
}/*==========遍历方法==========*/
void show_data(STACK_NODE *pnode)
{printf("%-10s\t%-10c\t%-10d\n",pnode->data.name,pnode->data.sex,pnode->data.age);
}
http://www.lryc.cn/news/325217.html

相关文章:

  • (第76天)XTTS 升级:11GR2 到 19C
  • 修改网站源码,给电子商城的商品添加图片时商品id为0的原因
  • ffmpeg开发异步AI推理Filter
  • python与excel第七节 拆分工作簿
  • JS08-DOM节点完整版
  • 【python】python3基础
  • 计算机三级网络技术 选择+大题234笔记
  • 智能合约 之 ERC-721
  • == 和 equals 的区别是什么?
  • VUE:内置组件<Teleport>妙用
  • ruoyi-nbcio-plus后端里mapstruct-plus和lombok的使用
  • 企业如何选择一个开源「好」项目?
  • c++算法学习笔记 (14) 并查集
  • import * as的使用
  • 微服务(基础篇-003-Nacos)
  • java数据结构与算法刷题-----LeetCode215. 数组中的第K个最大元素
  • Springboot 整合 Knife4j (API文档生成工具)
  • C语言---------strlen的使用和模拟实现
  • 【MATLAB源码-第168期】基于matlab的布谷鸟优化算法(COA)机器人栅格路径规划,输出做短路径图和适应度曲线。
  • 集合深入------理解底层。
  • 【阅读笔记】《硬笔书法艺术》
  • 5.5.5、【AI技术新纪元:Spring AI解码】使用PGvector设置向量存储及进行相似性搜索
  • EDR下的线程安全
  • 洛谷刷题 | B3623 枚举排列
  • 程序员35岁会失业吗?
  • RabbitMQ 安装保姆级教程
  • 【MySQL】InnoDB引擎
  • 小白如何兼职赚得第一桶金?六大网络赚钱方式助你轻松开启副业之旅
  • 富格林:出金不顺谨防虚假受害
  • Saltstack 最大打开文件数问题之奇怪的 8192