From ea9cfff753890c0e1d70b7e8c2864fa087dd7777 Mon Sep 17 00:00:00 2001 From: dxr <3565765357@qq.com> Date: Mon, 2 Nov 2020 23:19:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SeqStack.c | 22 +++++++++++++++++----- includes/SeqStack.h | 7 +++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/SeqStack.c b/SeqStack.c index e6846d6..7fd5fb8 100644 --- a/SeqStack.c +++ b/SeqStack.c @@ -1,10 +1,8 @@ /* * @Description: 顺序栈 * @Author: 大熊人 - * @Date: 2020-10-26 17:26:52 - * @LastEditTime: 2020-10-29 00:03:16 + * @LastEditTime: 2020-11-02 23:10:46 */ - #include #include #include "includes/SeqStack.h" @@ -17,7 +15,7 @@ int InitStack(SeqStack *S) { /* - 小白笔记: + 当时的错误,顺便记下笔记: S必须是一个结构体指针才能完成栈的初始化 因为如果只是结构体变量的话 那么它就是一个形参(局部变量) 局部变量的改变是不会影响到函数间同名变量的改变的 因此我们需要传结构体变量S的地址 简单理解就是通过S的地址 修改结构体成员变量 入栈 出栈 都一样 @@ -95,6 +93,16 @@ int Pop(SeqStack *S, STACK_DATA_TYPE *X) return TRUE; } +/** + * @description: 返回元素个数 + * @param {struct}S + * @return {int} + */ +int SeqStackLength(SeqStack S) +{ + return S.top - S.base; +} + /** * @description: 测试顺序栈 */ @@ -109,12 +117,16 @@ void TestSeqStack() printf("初始化失败!\n"); for (i = 1; i <= 5; i++) { - printf("Push:%d %s\n", i, Push(&S, i) ? "入栈成功" : "入栈失败"); + printf("Push:%d %s\n", i, Push(&S, i) ? "TRUE" : "FALSE"); } + printf("\nSeqStackLength=%d\n", SeqStackLength(S)); + GetTop(&S, &value); printf("Top:%d\n", value); while (Pop(&S, &value)) { printf("Pop:%d ", value); } + printf("\nSeqStackLength=%d\n", SeqStackLength(S)); + free(S.base); } \ No newline at end of file diff --git a/includes/SeqStack.h b/includes/SeqStack.h index 15397e6..9dbfc6d 100644 --- a/includes/SeqStack.h +++ b/includes/SeqStack.h @@ -1,8 +1,7 @@ /* * @Description: 顺序栈 * @Author: 大熊人 - * @Date: 2020-10-25 19:19:02 - * @LastEditTime: 2020-10-26 22:45:32 + * @LastEditTime: 2020-11-02 23:11:32 */ #define SEQSTACK_MAX 100 //栈的最大值 #define ADD_SIZE 10 //每次追加的值 @@ -10,8 +9,8 @@ #define FALSE 0 #define STACK_DATA_TYPE int -/* 顺序栈结构类型 */ -typedef struct SeqSrack +/* 顺序栈结构体类型 */ +typedef struct SeqStack { STACK_DATA_TYPE *base; //栈底指针 STACK_DATA_TYPE *top; //栈顶指针 -- GitLab