顺序栈的接口程序

/*************************************************
 *
 *   file name:SqStack.c
 *   author   :momolyl@126.com
 *   date     :2024/04/25
 *   brief    :构建顺序栈
 *   note     :None
 *
 *   CopyRight (c) 2024    momolyl@126.com    All Right Reseverd
 *
 **************************************************/
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
/*************************************************
 *
 *   func name     :
 *   brief         :
 *   func parameter:
 *
 *
 *   return        :None
 *   note          :None
 *   func author   :momolyl@126.com
 *   date          :2024/04/25
 *   version       :V1.0
 **************************************************/
typedef int DataType_t;
typedef struct SqStack // 存储栈的数据(栈底+栈顶+栈容量)
{
    DataType_t *Bottom;
    unsigned int Size;
    int Top;
} SqStack_t;

// 创建一个空的顺序栈
SqStack_t *SqStack_Create(unsigned int size)
{
    SqStack_t *Manager = (SqStack_t *)calloc(1, sizeof(SqStack_t));

    if (NULL == Manager)
    {
        perror("calloc memory for manager is failed!\n");
        exit(-1);
    }
    Manager->Bottom = (DataType_t *)calloc(1, sizeof(DataType_t));
    if (NULL == Manager->Bottom)
    {
        perror("calloc memory for Stack is failed!\n");
        free(Manager);
        exit(-1);
    }
    Manager->Size = size;
    Manager->Top = -1;

    return Manager;
}

// 判断栈是否已满
bool SqStack_IsFull(SqStack_t *Manager)
{
    if (Manager->Top + 1 == Manager->Size)
        return true;
    return false;
}
// 新元素从栈顶入栈,即从数组的尾部插入元素
bool SqStack_Push(SqStack_t *Manager, DataType_t Data)
{
    // 判断栈是否已满
    if (SqStack_IsFull(Manager))
    {
        printf("SqStack is full!\n");
        return false;
    }

    Manager->Bottom[++Manager->Top] = Data;
    return true;
}
// 判断栈是否为空
bool SqStack_IsEmpty(SqStack_t *Manager)
{
    if (Manager->Top == -1)
        return true;
    return false;
}

DataType_t SqStack_Pop(SqStack_t *Manager)
{
    DataType_t temp = 0; // 存储出栈元素的值
    // 判断栈是否为空
    if (SqStack_IsEmpty(Manager))
    {
        printf("SqStack is empty!\n");
        return;
    }

    temp = Manager->Bottom[Manager->Top--];
    return temp;
}
// 遍历顺序栈元素(测试函数)
void SqStack_Print(SqStack_t *Manager)
{
    for (int i = 0; i <= Manager->Top; i++)
        printf("Stack element[%d]=%d\n", i, Manager->Bottom[i]);
}
int main(void)
{

    SqStack_t *Manager = SqStack_Create(5);
    SqStack_Push(Manager, 1);
    SqStack_Push(Manager, 2);
    SqStack_Push(Manager, 3);
    SqStack_Push(Manager, 4);
    SqStack_Print(Manager);
    SqStack_Pop(Manager);
    SqStack_Pop(Manager);
    SqStack_Print(Manager);
    printf("the poped element is %d\n", SqStack_Pop(Manager));

    return 0;
}
posted @ 2024-04-25 23:05  铃是铃铛的铃  阅读(14)  评论(0)    收藏  举报