栈的顺序实现

的顺序实现
时间:2006/03/27
测试环境: TC2.0

复制代码
#include <stdio.h>
#define True 1
#define False 0
#define LEN sizeof(ElemType)
#define Stack_InitSize 100
#define Stack_Increment 30

typedef int ElemType;

struct SqStack
{
    ElemType *base;
    ElemType *top;
    int stacksize;
};

/*构造一个空栈*/
void InitStack(struct SqStack *S)
{
    S->base = (ElemType *)malloc(Stack_InitSize*LEN);
    if(!S->base)
        return;
    S->top = S->base;
    S->stacksize = Stack_InitSize;
    return;
}

/*销毁一个栈*/
void DestroyStack(struct SqStack *S)
{
    while(S->top!=S->base)
        S->top--;
    free(S->base);
    free(S);
}

/*将栈里面的元素清空*/
void ClearStack(struct SqStack *S)
{
    while(S->top!=S->base)
        S->top--;
}

/*判断是否为空栈*/
void IsEmpty(struct SqStack *S)
{
    if(S->top==S->base)
        printf("/nThe SqStack is empty!");
    else
        printf("/nThe SqStack is not empty!");
    return;
}

/*按出栈顺序打印这个栈*/
void Print(struct SqStack *S)
{
    ElemType *p;
    p = S->top;
    while(p!=S->base)
    {
        p--;
        printf("%d ",*p);
    }
    printf("/n");
    p=NULL;
}

/*向栈里压入数据e*/
void Push(struct SqStack *S,ElemType e)
{
    if(S->top - S->base >= S->stacksize) /*栈满,重新分配更大的空间*/
    {
        S->base = (ElemType *)realloc(S->base,(S->stacksize+Stack_Increment)*LEN);
        S->top = S->base + S->stacksize;
        S->stacksize += Stack_Increment;
    }
    *S->top = e;
    S->top++;
    return;
}

/*弹出栈顶元素*/
void Pop(struct SqStack *S)
{
    if(S->top==S->base)
        return;
    S->top--;
    printf("Pop the data:%d/n",*S->top);
    return;
}

/*返回栈顶元素*/
int GetTop(struct SqStack *S)
{
    ElemType *p = S->top;
    if(S->top==S->base)
    {
        printf("The stack is empty!");
        return False;
    }
    return *(--p);
}

void main()
{
    struct SqStack *SS;
    int i;
    SS = NULL;
    /*初始化这个栈*/
    InitStack(SS);
    /*将数据压入栈内*/
    for(i=0;i<10;i++)
        Push(SS,i);
    /*以出栈顺序打印栈*/
    Print(SS);
    printf("/n");
    /*弹出栈顶元素,并再次打印栈*/
    Pop(SS);
    Pop(SS);
    Print(SS);
    /*返回栈顶元素*/
    i = GetTop(SS);
    printf("/nThe Top data is:%d/n",i);
    /*清空栈,并判断是否为空*/
    ClearStack(SS);
    IsEmpty(SS);
    /*销毁栈*/
    DestroyStack(SS);
}
复制代码

运行后结果:

posted @   CoderWayne  阅读(259)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示