数据结构:顺序栈

栈是一种先进后出的数据结构,只允许在一端(栈顶)操作,代码中top表示栈顶。

stack.h

/*===============================================
*   文件名称:stack.h
*   创 建 者:cxy     
*   创建日期:2024年01月17日
*   描    述:
================================================*/
#ifndef _STACK_H
#define _STACK_H#include <stdio.h>
#include <stdlib.h>typedef struct stack{int *arr; //malloc开辟空间int len;  //开辟空间大小int top;  //栈顶,栈只能从一端操作(栈顶)
}Stack,*Pstack;int init(Pstack *P,int len);   //创建栈
int push_stack(Pstack p,int data);  //入栈
int pop_stack(Pstack p,int *data);  //出栈,只能从栈顶依次出栈
int empty_stack(Pstack p);  //栈空,1为空
int full_stack(Pstack p);  //栈满,1为满
int sum_stack(Pstack p);   //栈内元素个数#endif

stack.c

/*===============================================
*   文件名称:stack.c
*   创 建 者:cxy     
*   创建日期:2024年01月17日
*   描    述:
================================================*/
#include "stack.h"int init(Pstack *P,int len)
{*P = malloc(sizeof(Stack));  //结构体if(NULL == (*P)){perror("init err:*P");return -1;}(*P)->arr = malloc(sizeof(int)*len);  //数组if(NULL == (*P)->arr){perror("init err:(*P)->arr");free(*P);return -1;}(*P)->len = len;(*P)->top = -1;   //将栈顶作为下标始用return 0;
}int push_stack(Pstack p,int data)
{if(NULL == p){perror("push err:p");return -1;}if(full_stack(p)){perror("push err:full");return -1;}p->arr[++(p->top)] = data;return 0;
}//int *data为出栈元素,通过地址传递改变实际参数
//该函数返回值只作为判断
int pop_stack(Pstack p,int *data)
{if(NULL == p){perror("pop err:p");return -1;}if(empty_stack(p)){perror("pop err:empty");return -1;}*data = p->arr[(p->top)--];return 0;
}int empty_stack(Pstack p)
{if(NULL == p){perror("empty err:p");return -1;}if(p->top == -1)return 1;else return 0;
}
int full_stack(Pstack p)
{if(NULL == p){perror("full err:p");return -1;}if((p->len)-1 == p->top)  //如len = 100,arr[100],top为下标最大为99return 1;else return 0;
}int sum_stack(Pstack p)
{if(NULL == p){perror("sum err:p");return -1;}return p->top+1;   //下标加1
}

mian.c

/*===============================================
*   文件名称:main.c
*   创 建 者:cxy     
*   创建日期:2024年01月17日
*   描    述:
================================================*/
#include "stack.h"int main(int argc, char *argv[])
{ Pstack p;int data;printf("请输入开辟空间元素个数:\n");scanf("%d",&data);init(&p,data);printf("**********empty_stack,1为空**********\n");data = empty_stack(p);printf("%d\n",data);printf("**********push_stack**********\n");for(int i = 1;i < 6;i++){printf("请输入第%i个入栈元素:",i);scanf("%d",&data);push_stack(p,data);}printf("**********full_stack,1为满**********\n");data = full_stack(p);printf("%d\n",data);printf("**********empty_stack,1为空**********\n");data = empty_stack(p);printf("%d\n",data);printf("**********sum_stack**********\n");data = sum_stack(p);printf("栈内共有%d个有效数据\n",data);printf("**********pop_stack**********\n");  //先进后出for(int i = 1;i < 6;i++){pop_stack(p,&data);printf("第%i个出栈元素:%d\n",i,data);}printf("**********empty_stack,1为空**********\n");data = empty_stack(p);printf("%d\n",data);printf("**********full_stack,1为满**********\n");data = full_stack(p);printf("%d\n",data);printf("**********sum_stack**********\n");data = sum_stack(p);printf("栈内共有%d个有效数据\n",data);return 0;
} 

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/410142.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC的原理

Spring MVC中的MVC即模型-视图-控制器&#xff0c;该框架围绕一个DispatcherServlet设计而成&#xff0c;DispatcherServlet会把请求分发给各个处理器&#xff0c;并支持可配置的处理器映射和视图渲染等功能。Spring MVC的具体工作流程如下&#xff1a; &#xff08;1&#xff…

C——语言内存函数

目录 一、memcpy的使用和模拟实现 1.memcpy函数原型 2.memcpy函数的使用 3.memcpy函数的模拟实现 二、memmove的使用和模拟实现 1.memmove函数原型 2.memmove函数的使用 3.memmove函数的模拟实现 三、memset的使用 1.memset函数原型 2.memset函数的使用 四、memcmp…

bash shell基础命令(一)

1.shell启动 shell提供了对Linux系统的交互式访问&#xff0c;通常在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。 /etc/passwd/文件包含了所有用户的基本信息配置&#xff0c; $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash ...例如上述root账户信…

Python新手常见问题——列表中删不掉的0

1.测试代码 运行代码 nums1 [1,2,3,0,0,0] print(type(nums1))for i in nums1:if i 0:nums1.remove(i) print(nums1)效果如下 2.疑问&#xff1a; 上面代码&#xff0c;为什么把nums1里面的0移除不干净 3.原因&#xff1a; 在 Python 中&#xff0c;不建议在循环中直接…

修改SSH默认端口,使SSH连接更安全

以CentOS7.9为例&#xff1a; 1、修改配置文件 vi /etc/ssh/sshd_config 2、远程电脑可连接&#xff0c;暂时将SELinux关闭 # 查询状态 getenforce # 关闭 setenforce 0 # 开启 setenforce 1 3、SELinux设置&#xff08;如果启用&#xff09;&#xff0c;semanage管理工具安…

mac上部署单体hbase

1. 简介 HBase 是一个开源的、分布式的、版本化的典型非关系型数据库。它是 Google BigTable 的开源实现&#xff0c;并且是 Apache 基金会的 Hadoop 项目的一部分1。HBase 在 Hadoop Distributed File System (HDFS) 上运行&#xff0c;作为一个列式存储非关系数据库管理系统…

Angular系列教程之变更检测与性能优化

文章目录 前言变更检测的原理脏检查OnPush策略 示例代码总结 前言 Angular 除了默认的变化检测机制&#xff0c;也提供了ChangeDetectionStrategy.OnPush&#xff0c;用 OnPush 可以跳过某个组件或者某个父组件以及它下面所有子组件的变化检测。 在本文中&#xff0c;我们将探…

vscode显示120字符或者80字符提示线或者显示垂直标尺

vscode显示120字符或者80字符提示线或者显示垂直标尺 一般规定一行代码不超过80或者120个字符。取决于团队的编码规范。 不同公司不同团队有不同的规定。 当单行代码过长。产生横向滚动条。使得代码难以阅读。 打开全局设置的settings.json /C:/Users/xxx/AppData/Roaming/Cod…

java音乐交流和周边售卖商城系统springboot+vue

不同的系统提供的服务也不相同&#xff0c;其对应的功能也不相同&#xff0c;所以&#xff0c;系统开工前&#xff0c;需要明确其用途&#xff0c;确定其功能。由此&#xff0c;才可以进行各个任务的开展。 国外摇滚乐队交流和周边售卖系统经过分析&#xff0c;确定了其需要设置…

【昕宝爸爸小模块】图文源码详解什么是线程池、线程池的底层到底是如何实现的

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

轻松识别Midjourney等AI生成图片,开源GenImage

AIGC时代&#xff0c;人人都可以使用Midjourney、Stable Diffusion等AI产品生成高质量图片&#xff0c;其逼真程度肉眼难以区分真假。这种虚假照片有时会对社会产生不良影响&#xff0c;例如&#xff0c;生成公众人物不雅图片用于散播谣言&#xff1b;合成虚假图片用于金融欺诈…

第一次开发基于SpringBoot的Java应用

第一次开发基于SpringBoot的Java应用 一、 方式1&#xff1a;IDEA创建New Project Spring Boot官方文档的Getting Started1、IDEA创建New Project2、Spring Boot官方文档的Getting Started2.1 Creating the POM &#xff08;实际是&#xff0c;更新pom.xml&#xff09;2.2 Add…