2.1 栈--顺序栈
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: %ld\n",stackEmpty(mystack));
break;
case 5:
get_top(mystack);
break;
case 6:
printf("length: %ld\n",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 <stdio.h>
#include <assert.h>
#include <stdlib.h>
// 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 /* SqueStack_h */
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("%d\n",*(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;
}