C语言实现栈数据结构及操作示例

创作灵感:本篇博客将介绍如何使用C语言编写栈数据结构,并演示了栈的初始化、入栈、出栈和打印操作。这个简单的栈示例有助于初学者理解栈的基本概念和操作。

技术笔记巩固知识要点:

  1. 栈的结构定义:程序使用C语言定义了一个栈结构(Stack),其中包含一个整数数组用于存储数据,以及一个指示栈顶位置的整数变量top。

  2. 初始化栈:initStack函数用于将栈初始化为空栈,将top设置为-1。

  3. 入栈操作:push函数用于将数据压入栈中。在入栈之前,需要检查栈是否已满,如果栈已满则无法入栈。

  4. 出栈操作:pop函数用于弹出栈顶元素,并返回该元素的值。在出栈之前,需要检查栈是否为空,如果栈为空则无法出栈。

  5. 打印栈中元素:printStack函数用于打印栈中所有元素的值。如果栈为空,则打印提示信息。

在主函数中,程序演示了以下操作:

  • 用户输入初始元素并压入栈中。
  • 弹出并打印栈顶元素(如果栈不为空)。
  • 通过键盘输入一个新元素,并将其压入栈中。
  • 打印新的栈元素。
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAXSIZE 100
    
    typedef struct {
        int data[MAXSIZE];
        int top;
    } Stack;
    
    // 初始化栈
    void initStack(Stack *s) {
        s->top = -1;
    }
    
    // 入栈操作
    int push(Stack *s, int add_data) {
        if(s->top == (MAXSIZE - 1)){
            printf("栈已满\n");
            return 0;
        }
        s->data[++(s->top)] = add_data;
        return 1;
    }
    
    // 出栈操作
    int pop(Stack *s) {
        if(s->top == -1){
            printf("栈已空\n");
            return 0;
        }
        return s->data[(s->top)--];
    }
    
    // 打印栈中元素
    void printStack(Stack *s) {
        if(s->top == -1){
            printf("栈已空\n");
            return;
        }
        printf("栈中元素为:");
        for(int i = 0; i <= s->top; i++)
            printf("%d ", s->data[i]);
        printf("\n");
    }
    
    int main() {
        Stack s;
        initStack(&s);
    
        // 用户输入初始元素并压入栈中
        printf("请输入添加到栈中的初始元素数量:");
        int n;
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            printf("请输入第 %d 个元素:", i+1);
            int item;
            scanf("%d", &item);
            push(&s, item);
        }
        printStack(&s);
    
        // 弹出并打印栈顶元素
        if(s.top != -1) {
            printf("弹出并打印栈顶元素:%d\n", pop(&s));
        } else {
            printf("栈已空,无法弹出\n");
        }
    
        // 通过键盘读取元素并压入栈中
        int data;
        printf("请输入要添加到栈中的新元素:");
        scanf("%d", &data);
        push(&s, data);
        
        // 打印新的堆栈元素
        printStack(&s);
    
        return 0;
    }
    
    

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值