首页 > 技术文章 > 数据结构C语言实现----入栈操作

jerryleesir 2020-07-16 16:38 原文

 

1.栈顶是没有元素的,栈顶是一个空值

2.把一个元素压进栈时,不要给栈顶的地址赋值,而是赋值给指针

    例如:你在结构体中定义了 char *top;

      那么你要把元素date赋值给*top,而不是top

      赋值完成后,top++,因为栈顶没有值

 

代码如下:

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

typedef struct 
{
    char *base;
    char *top;
    int stacksize;
} sqStack;

//////////////////////////////
//创建一个栈
#define SATCK_INIT_SIZE 100
void initstack(sqStack *stack)
{
    stack->base = (char*)malloc( SATCK_INIT_SIZE * sizeof(char));
    if (!stack->base)
    {
        exit(0);
    }
    stack->top = stack->base;
    stack->stacksize = SATCK_INIT_SIZE;
}
/////////////////////////////
//入栈操作
#define STACK 10
void Push(sqStack *stack , char c)
{
    if (stack->top - stack->base > stack->stacksize)
    {//空间不足,追加空间
        stack->base = (char*)realloc(stack->base , (STACK + stack->stacksize) * sizeof(char));//用realloc函数在原内容不变的基础上追加空间
        if (!stack->base)
        {
            exit(0);
        }
        stack->top = stack->base + stack->stacksize;
        stack->stacksize = stack->stacksize + STACK;
    }
    *(stack->top) = c;//stack->top是一个地址,而*(stack->top)是一个char类型的变量
    stack->top++;//地址加一
}
int main()
{
    sqStack stack;
    initstack(&stack);//创建一个栈
    printf("请输入要压入栈的字符:");
    char c;
    scanf("%c",&c);
    Push(&stack,c);
    printf("打印栈中元素:%c" , *--(stack.top));
    return 0;
}

  

 

 

运行结果:

 

推荐阅读