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

用C语言实现链栈的基本操作

#include <stdio.h>
#include <malloc.h>
#define ElemType char//相当于ElemType等同于char类型
//链式结构  =数据域+指针域
typedef struct LinkStackNode//定义一个链栈的结构体类型
{ElemType data;//ElemType是链栈的元素类型,代表数据域struct LinkStackNode* next;//代表指针域
}LinkStackNode;typedef struct LinkStack//代表链栈的头结点
{LinkStackNode* head;
}LinkStack;
//判断链栈是否为空
int StackEmpty(LinkStack* s)
{ if (s->head == NULL)return 1;elsereturn 0;
}
//链栈的初始化
void InitStack(LinkStack* s)
{s->head = NULL;
}
//链栈进栈操作
void Push(LinkStack* s, ElemType x)
{LinkStackNode* p;p = (LinkStackNode*)malloc(sizeof(LinkStackNode));//为这个链栈申请内存p->data = x;//将数据x放入链栈中p->next = s->head;//指向下一个指针域s->head = p;
}
//链栈出栈操作
void Pop(LinkStack* s)
{if (StackEmpty(s))//表示这个链栈是空栈{printf("栈空");}LinkStackNode* p = s->head;s->head = p->next;
}
//遍历打印链栈
void printLinkStack(LinkStack* s)
{LinkStackNode* p = s->head;while (p != NULL){printf("%c ", p->data);//因为前面是char类型,所以这用%cp = p->next;//指向下一个数据域}printf("\n");
}//栈顶操作
int GetTop(LinkStack*s)
{if (StackEmpty(s))//表示这个链栈是空栈{printf("栈空");return 0;}return s->head->data;//s->head->data就是栈顶元素
}
//求链栈长度
int Getlength(LinkStack* s)
{int length = 0;//先赋初值LinkStackNode* p = s->head;while (p != NULL)//链栈不为空,遍历循环整个链栈{length++;p = p->next;//指向下一个数据域}return length;
}
int main()
{ElemType e;LinkStack s;InitStack(&s);printf("栈%s\n", (StackEmpty(&s) == 1 ? "空" : "不空"));printf("a进栈\n");Push(&s,'a');printf("b进栈\n");Push(&s,'b');printf("c进栈\n");Push(&s,'c');printf("d进栈\n");Push(&s,'d');printf("打印当前链栈里面的元素:\n");printLinkStack(&s);printf("进行出栈操作:\n");Pop(&s);printLinkStack(&s);printf("栈顶的元素为%c", GetTop(&s));printf("\n");printf("此时链栈的长度为:%d", Getlength(&s));return 0;
}

 运行结果:

        

相关文章:

  • Day03 linux高级系统编程--进程
  • 电气火灾监控系统
  • 正则表达式(5):常用符号
  • 51单片机程序
  • 10_企业架构NOSQL数据库之MongoDB
  • Amazon CodeWhisperer 使用体验
  • 绝地求生:NH究极天命圈惊险吃鸡,17斩获单日积分第一,4AM梦游暂居倒数
  • 【latex】参考文献引用方式
  • 什么是高防IP,高防IP该如何选择。
  • 数据库原理: 笛卡儿积
  • Zabbix自定义飞书webhook告警媒介1
  • Linux常见问题-获取日志方法总结(Ubuntu/Debian)
  • MIT6S081-Lab2总结
  • 【数据库设计和SQL基础语法】--表的创建与操作--创建表的语法和实例
  • 01-Redis核心数据结构与高性能原理
  • [ JavaScript ] 数据结构与算法 —— 链表
  • AHK 中 = 和 == 等比较运算符的用法
  • JAVA之继承和多态
  • JS笔记四:作用域、变量(函数)提升
  • Linux快速复制或删除大量小文件
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Python学习笔记 字符串拼接
  • React Native移动开发实战-3-实现页面间的数据传递
  • springMvc学习笔记(2)
  • Vue ES6 Jade Scss Webpack Gulp
  • vue脚手架vue-cli
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于 Babel 的 npm 包最小化设置
  • 浅谈Golang中select的用法
  • 树莓派 - 使用须知
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在electron中实现跨域请求,无需更改服务器端设置
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (42)STM32——LCD显示屏实验笔记
  • (6)添加vue-cookie
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (java)关于Thread的挂起和恢复
  • (LeetCode) T14. Longest Common Prefix
  • (差分)胡桃爱原石
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十六)Flask之蓝图
  • (算法)N皇后问题
  • (算法二)滑动窗口
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战