每天一个数据结构-----栈的顺序存储实现

本文介绍了一个简单的栈数据结构实现,并演示了如何进行初始化、入栈、出栈等基本操作。通过具体的C语言代码示例,展示了栈作为一种重要的线性数据结构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>



#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define MAXSIZE 10



typedef int Status;

typedef int SelemType;

typedef struct

{

    SelemType data[MAXSIZE];

    int top;

} StackList;

//初始化栈

Status InitStack(StackList *stack)

{

    stack->top = -1;

    return OK;

}

//判断栈stack是否为空栈

Status StackEmpty(StackList stack)

{

    if (stack.top == -1) return TRUE;

    else return FALSE;

}

//将SelemType:e 做入栈操作

//初始化条件:栈stack非满

Status Push(StackList *stack,SelemType e)

{

    if (stack->top >= MAXSIZE-1)  return ERROR;

    stack->top++;

    stack->data[stack->top] = e;

    return OK;

}

//出栈

Status Pop(StackList *stack,SelemType *e)

{

    if (stack->top == -1) return FALSE;



    *e = stack->data[stack->top];

    stack->top--;



    return OK;

}

//获取栈stack的元素个数

int StackLength(StackList stack)

{

    return stack.top+1;

}

// 把S置为空栈

Status ClearStack(StackList *stack)

{

    stack->top=-1;

    return OK;

}

Status visit (SelemType e){

    printf("%d\n",e);

    return OK;

}

//从栈底到栈顶遍历每一个元素

Status StackTraver (StackList *stack,SelemType *e)

{

    int i;

    if (stack->top == -1) return ERROR;

    for (i=0;i<=stack->top;i++)

    {

        visit(stack->data[i]);

    }

    return OK;

}



int main() {

    StackList stack;

    int i;

    SelemType e ;



    printf("初始化栈stack...:\n");



    InitStack(&stack);



    if (StackEmpty(stack))

        printf("栈stack是空栈...\n");



    printf("顺序将0,100,200,···500做入栈操作...\n");

    for (i = 0;i<6;i++)

        Push(&stack,i*100);





    printf("做入栈操作后栈stack长度:%d\n",StackLength(stack));

    printf("栈stack各元素为:\n");



    StackTraver(&stack, &e);



    printf("将栈顶元素做出栈操作...\n");

    Pop(&stack, &e);

    printf("栈顶元素:%d已经出栈\n",e);



    printf("栈顶元素出栈之后:栈stack长度:%d\n",StackLength(stack));



    printf("清空stack栈\n");

    ClearStack(&stack);



    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值