C语言-数据结构-顺序栈

/*
2018/8/9
顺序栈
结构体元素俩,一个数组,一个指向数组开始的上一个位置的指针
打印结果:
这里写图片描述
*/

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "stdbool.h" //存放bool和false true头文件 

#define MAX_SIZE 50

typedef struct Stack{
    int data[MAX_SIZE];
    int top; 
}*PStack,Stack;


//函数声明区 
PStack InitStack(void); //初始化栈 
void StackPush(PStack S, int val) ;  //压栈 
bool StackPop(PStack S, int* val);//出栈
void StackTraverse(PStack S); //遍历栈 
void StackClear(PStack S);  //清空栈 


int main()
{
    int i,val;
    PStack S =  InitStack();
    StackTraverse(S);

    StackPush(S, 78);
    StackPush(S, 223);
    StackPush(S, 34);
    StackPush(S, 45);
    StackPush(S, 56);
    StackPush(S, 7678); 
    StackTraverse(S);

    StackPop(S, &val);
    StackPop(S, &val);
    StackPop(S, &val);
    StackPop(S, &val);
    StackPop(S, &val);
    StackPop(S, &val);
    StackPop(S, &val);
    StackPop(S, &val);
    StackPop(S, &val);
    StackTraverse(S);

    StackPush(S, 45);
    StackPush(S, 56);
    StackPush(S, 7678); 
    StackTraverse(S);   


    printf("\nHello World!!\n");
    return;
} 

/*初始化栈*/ 
PStack InitStack(void)
{
    PStack S = (PStack)malloc(sizeof(Stack));
    S->top = -1;
    return S; 
}


/* 压栈 */ 
void StackPush(PStack S, int val) 
{
    if(S->top == (MAX_SIZE-1))//判满 
    {
        printf("栈满,请释放栈后在请求入栈!!\n");return;
    } 
    S->data[++S->top] = val;
    return;
} 

/* 出栈 到val ,出错返回false */
bool StackPop(PStack S, int* val)
{
    if(S->top == -1) 
    {
        printf("出栈失败!!\n");return false; 
    }

    *val = S->data[S->top--];
    printf("val = %d出栈成功! \n",*val);  
    return true;    
} 


/* 遍历打印 */ 
void StackTraverse(PStack S)
{
    if(S->top == -1)
    {
        printf("空栈无法遍历!!\n");return; 
    }

    int i = 0;
    while(i != (S->top+1))
    {
        printf("%d ",S->data[i++]);
    }
    printf("\n");
    return;
} 

猜你喜欢

转载自blog.csdn.net/qq_32460819/article/details/81540432