数据结构day7栈-顺序栈的实现

  用指针比用数组好,这样用户可以自己指定空间的大小,有参与感。

 

 全部代码:

main.c

#include <stdio.h>
#include <string.h>
#include "sqstack.h"int main(int argc, char *argv[])
{sqstack *s;int i;s = stack_create(100);if(s == NULL)return -1;stack_push(s,100);stack_push(s,90);stack_push(s,80);stack_push(s,70);stack_push(s,60);for(i = 0; i <= s->top; i++)//显示栈中的元素{printf("%d\n", s->data[i]);}while(!stack_empty(s)) {printf("pop : %d\n",stack_pop(s));}stack_free(s);return 0;
}

sqstack.c

#include <stdio.h>
#include <stdlib.h>
#include "sqstack.h"
#include <string.h>/* 要创建一个结构体的栈,和一个放数据的栈  */
sqstack * stack_create(int len){sqstack *s;if((s = (sqstack *)malloc(sizeof(sqstack))) == NULL) {printf("malloc sqstack failed\n");return NULL;}if(((s->data) = (data_t *)malloc(len * sizeof(data_t))) == NULL) {printf("malloc data failed\n");return NULL;}memset(s->data, 0, len * sizeof(data_t));s->maxlen = len;s->top = -1;return s;}
int stack_push(sqstack *s, data_t value){if(s == NULL) {printf("s is NULL\n");return -1;}if(s->top == s->maxlen -1) {printf("stack is full\n");return -1;}s->top ++;s->data[s->top] = value;return 0;}
/* 1-empty  */
int stack_empty(sqstack *s){if(s == NULL) {printf("s is NULL\n ");return -1;}return (s->top == -1 ? 1 : 0);}
/* 1-full  */
int stack_full(sqstack *s){if(s == NULL) {printf("s is NULL\n");return -1;}return (s->top == s->maxlen - 1 ? 1 : 0);}
data_t stack_pop(sqstack *s){s->top--;return (s->data[s->top+1]);}//显示top的值
data_t stack_top(sqstack *s){return (s->data[s->top]);}int stack_clear(sqstack *s){if(s == NULL){printf("s is NULL\n");return -1;}s->top = -1;return 0;}//有几个malloc就有几个freeint stack_free(sqstack *s){if(s == NULL){printf("s is NULL\n");return -1;}	if(s->data != NULL)//开辟栈可能失败{free(s->data);}free(s);return 0;
}

sqstack.h

typedef int data_t;typedef	struct{data_t *data;int maxlen;int top;}sqstack;sqstack * stack_create(int len);
int stack_push(sqstack *s, data_t value);
int stack_empty(sqstack *s);
int stack_full(sqstack *s);
data_t stack_pop(sqstack *s);
data_t stack_top(sqstack *s);
int stack_clear(sqstack *s);
int stack_free(sqstack *s);

运行结果

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

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

相关文章

Python continue 语句

Python continue 语句跳出本次循环&#xff0c;而break跳出整个循环。 continue 语句用来告诉Python跳过当前循环的剩余语句&#xff0c;然后继续进行下一轮循环。 continue语句用在while和for循环中。 Python 语言 continue 语句语法格式如下&#xff1a; continue 流程图…

go语言 go mod生成

1. go hello world 创建文件夹gotest&#xff0c;在其中创建test1.go文件&#xff0c;并写入 package mainimport ("fmt" )func main() {fmt.Println("hello world") } 运行命令 go run test1.go 可以看到输出hello world 2. cli 命令行的使用 代码如下…

口才训练方法和技巧有哪些?

口才是一种重要的沟通技能&#xff0c;可以帮助人们更好地表达自己&#xff0c;影响他人&#xff0c;并建立更强的人际关系。在这篇文章中&#xff0c;我们将探讨一些口才训练的方法和技巧&#xff0c;帮助你提高口才水平。 1. 提前准备&#xff1a;在进行任何演讲或公开演讲之…

【Linux网络编程】环境配置篇

由于博主本学期所使用的Linux系统为Ubuntu&#xff0c;所以这篇博客会先以安装虚拟机和Ubuntu开始。 虚拟机的话&#xff0c;可以选择VMware&#xff0c;也可以选择VirtualBox。直接选择安装就行&#xff0c;这个应该是没有什么问题的。但是&#xff0c;如果之前电脑安装过Vmwa…

go Session的实现(一)

〇、前言 众所周知&#xff0c;http协议是无状态的&#xff0c;这对于服务器确认是哪一个客户端在发请求是不可能的&#xff0c;因此为了能确认到&#xff0c;通常方法是让客户端发送请求时带上身份信息。容易想到的方法就是客户端在提交信息时&#xff0c;带上自己的账户和密…

分布式环境集成JWT(Java Web Token)

目录 一&#xff0c;说明&#xff1a;二&#xff0c;Token、Session和Cookie比较三&#xff0c;Spring Boot项目集成JWT1&#xff0c;引入依赖2&#xff0c;Token工具类3&#xff0c;定义拦截器4&#xff0c;注册拦截器5&#xff0c;编写登录代码6&#xff0c;测试 四&#xff…

#include <graphics.h> #include <conio.h> #include<stdlib.h>无法打开源文件解决方案

一、问题描述 学习数据结构链表的过程中&#xff0c;在编写漫天星星闪烁的代码时&#xff0c;遇到了如下图所示的报错&#xff0c;#include <graphics.h> 、 #include <conio.h> 等无法打开源文件。 并且主程序中initgraph(初始化画布)、setfillcolor&#xff08;…

【权限提升-Windows提权】-UAC提权之MSF模块和UACME项目-DLL劫持-不带引号服务路径-不安全的服务权限

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的&#xff1f; 后台权限&#xff0c;网站权限&#xff0c;数据库权限&#xff0c;接口权限&#xff0c;系统权限&#xff0c;域控权限等 2、以上常见权限获取方法简要归类说明&#xff1f; 后台权限&#xff1a;SQL注入,数…

BuhoCleaner for mac:让你的Mac重获新生

你是否曾经因为电脑运行缓慢而感到困扰&#xff1f;是否曾经因为大量的垃圾文件和无效的临时文件而感到头疼&#xff1f;如果你有这样的烦恼&#xff0c;那么BuhoCleaner for mac就是你的救星&#xff01; BuhoCleaner for mac是一款专门为Mac用户设计的系统清理工具&#xff…

联发科MTK6762/MT6762核心板_安卓主板小尺寸低功耗4G智能模块

MT6762安卓核心板是一款基于MTK平台的高性能智能模块&#xff0c;是一款工业级的产品。该芯片也被称为Helio P22。这款芯片内置了Arm Cortex-A53 CPU&#xff0c;最高可运行于2.0GHz。同时&#xff0c;它还提供灵活的LPDDR3/LPDDR4x内存控制器&#xff0c;此外&#xff0c;Medi…

机器学习——聚类算法一

机器学习——聚类算法一 文章目录 前言一、基于numpy实现聚类二、K-Means聚类2.1. 原理2.2. 代码实现2.3. 局限性 三、层次聚类3.1. 原理3.2. 代码实现 四、DBSCAN算法4.1. 原理4.2. 代码实现 五、区别与相同点1. 区别&#xff1a;2. 相同点&#xff1a; 总结 前言 在机器学习…

GPT转换工具:轻松将MBR转换为GPT磁盘

为什么需要将MBR转换为GPT&#xff1f; 众所周知&#xff0c;Windows 11已经发布很长时间了。在此期间&#xff0c;许多老用户已经从Windows 10升级到Windows 11。但有些用户仍在运行Windows 10。对于那些想要升级到Win 11的用户来说&#xff0c;他们可能不确定Win 11应该使…