C语言实现栈(插入,删除)

#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#include<stdlib.h>

#define STACKSIZE 10
#define TRUE 1
#define FALSE 0

typedef struct Stack
{
    int *data;
    int top;
    int stacksize;
}Stack,*StackPtr;
//初始化
int Init_SqStack(StackPtr Stack)
{
    assert(Stack != NULL);
    if (Stack == NULL)
    {
        printf("Stack is null\n");
    }
    Stack->data = (int *)malloc(sizeof(STACKSIZE));
    if (Stack->data == NULL)
    {
        printf("stack is filure\n");
    }
    Stack->top = 0;
    Stack->stacksize = STACKSIZE;
    return TRUE;
}
//判满
int Full_SqStack(StackPtr Stack)
{
    if (Stack->data == NULL ||  Stack->stacksize == STACKSIZE)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
//扩展
int Append_SqStack(StackPtr Stack)
{
    if (Stack->top == Stack->stacksize)
    {
        exit(0);
    }

    int* data = (int*)malloc(sizeof(int)*STACKSIZE * 2);
    if (data == NULL)
    {
        printf("data is filure\n");
    }
    
    for (int i = 0; i < Stack->stacksize; i++)
    {
        data[i] = Stack->data[i];
    }
    free(Stack->data);
    Stack->data = data;
    Stack->stacksize *= 2;
    return TRUE;
}
//入栈
int Push_SqStack(StackPtr Stack, int val)
{
    assert(Stack != NULL);
    if (Stack == NULL)
    {
        printf("Stack is null\n");
    }
    if (Full_SqStack(Stack) && !Append_SqStack(Stack))
    {
        printf("Insert is error\n");
    }
    Stack->data[Stack->top++] = val;
    return TRUE;
}
//出栈
void Pop_SqStack(StackPtr Stack)
{
    assert(Stack != NULL);
    if (Stack == NULL)
    {
        printf("Stack is null\n");
    }
    Stack->top--;
}

//得到栈顶元素
int Get_Head_SqStack(StackPtr Stack, int* val)
{
    assert(Stack != NULL);
    *val = Stack->data[Stack->top-1];
    return *val;
}
//清空
void Clear(StackPtr Stack)
{
    assert(Stack != NULL);
    if (Stack == NULL)
    {
        printf("Stack is null\n");
    }
    Stack->top = 0;
}
//摧毁
void Destroy(StackPtr Stack)
{
    assert(Stack != NULL);
    if (Stack == NULL)
    {
        printf("Stack is null\n");
    }
    Stack->top = 0;
    Stack->stacksize = 0;
}
//得到栈的长度
int Length_SqStack(StackPtr Stack)
{
    assert(Stack != NULL);
    int count = 0;
    while (Stack->top >= 0)
    {
        count++;
        Stack->top--;
    }
    return count;
}
//打印栈
void Show(StackPtr Stack)
{
    assert(Stack != NULL);
    if (Stack == NULL)
    {
        printf("Stack is null\n");
    }

    for (int i = 0; i < Stack->top; i++)
    {
        printf(" %4d",Stack->data[i]);
    }
    printf("\n");
}


int main()
{
    Stack stack;

    Init_SqStack(&stack);
    if (!Init_SqStack(&stack))
    {
        printf("init is error\n");
    }
    for (int i = 0; i < 10; i++)
    {
        Push_SqStack(&stack, i);
     }
    Show(&stack);
    printf("%4d\n",Get_Head_SqStack(&stack,&stack.top));

    Push_SqStack(&stack, 100);
    Push_SqStack(&stack, 200);
    Push_SqStack(&stack, 300);
    Show(&stack);
    
    Pop_SqStack(&stack);
    Show(&stack);

    printf("%4d\n",Length_SqStack(&stack));
    return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值