1.main.c
//
// main.c
// 7_SqueStack
//
// Created by ls on 2022/5/19.
// Copyright © 2022 LSC001. All rights reserved.
//
#include "SqueStack.h"
int main() {
SqueStack mystack;
InitStack(&mystack);
int select=1;
ElemType value=0;
while(select)
{
printf("********************************************n");
printf("* [1] push_back [2] pop_back *n");
printf("* [3] show_Stack [4] stackEmpty *n");
printf("* [5] get_top [6] length *n");
printf("* [7] clear [8] destroy *n");
printf("********************************************n");
printf("请选择:> ");
scanf("%d",&select);
if(0 == select)
break;
switch (select)
{
case 1:
printf("Please input a number(-1 end): ");
while(scanf("%d",&value),value!= -1)
{
push_back(&mystack,value);
}
show_Stack(&mystack);
break;
case 2:
pop_back(&mystack,&value);
show_Stack(&mystack);
break;
case 3:
show_Stack(&mystack);
break;
case 4:
printf("Empty: %ldn",stackEmpty(mystack));
break;
case 5:
get_top(mystack);
break;
case 6:
printf("length: %ldn",length(mystack));
break;
case 7:
clear0(&mystack);
break;
case 8:
destroy(&mystack);
break;
default:
printf("输入错误!");
break;
}
}
destroy(&mystack);
printf("Hello, World!n");
return 0;
}
2.SqueStack.h
// // SqueStack.h // 7_SqueStack // // Created by ls on 2022/5/19. // Copyright © 2022 LSC001. All rights reserved. // #ifndef SqueStack_h #define SqueStack_h #include#include #include // 1 定义宏 #define MAXSTACK 5 typedef int ElemType; // 2 定义栈 typedef struct SqueStack { ElemType *base,*top; int stacksize; }SqueStack; // 3 函数声明 void InitStack(SqueStack *stack); void push_back(SqueStack *stack,ElemType num); // 1 void pop_back(SqueStack *stack,ElemType *num); // 2 void show_Stack(SqueStack *stack); // 3 void get_top(SqueStack stack); // 4 long stackEmpty(SqueStack stack); // 5 long length(SqueStack stack); // 6 void clear0(SqueStack *stack); // 7 void destroy(SqueStack *stack); // 8 #endif
3.SqueStack.c
//
// SqueStack.c
// 7_SqueStack
//
// Created by ls on 2022/5/19.
// Copyright © 2022 LSC001. All rights reserved.
//
#include "SqueStack.h"
void InitStack(SqueStack *stack)
{
stack->base = (ElemType*)malloc(MAXSTACK*sizeof(ElemType));
assert(stack->base != NULL);
stack->top = stack->base;
stack->stacksize = MAXSTACK;
}
void push_back(SqueStack *stack,ElemType num) // 1
{
if(stack->top - stack->base == stack->stacksize) return;
*(stack->top++) = num;
}
void pop_back(SqueStack *stack,ElemType *num) // 2
{
if(stack->top == stack->base ) return;
*num = *(--(stack->top));
}
void show_Stack(SqueStack *stack) // 3
{
if(stack->top - stack->base == stack->stacksize) return;
ElemType *p= stack->base;
while (p != stack->top) {
printf("%d,",*p++);
}
printf("n");
}
long stackEmpty(SqueStack stack) // 4
{
if(stack.top == stack.base )
{
return 1;
}
else
{
return 0;
}
}
void get_top(SqueStack stack) // 5
{
if(! stackEmpty(stack)) printf("%dn",*(stack.top-1));
}
long length(SqueStack stack) // 6
{
return stack.top - stack.base;
}
void clear0(SqueStack *stack) // 7
{
stack->top = stack->base;
}
void destroy(SqueStack *stack) // 8
{
free(stack->base);
stack->top = stack->base=NULL;
}



