创作灵感:本篇博客将介绍如何使用C语言编写栈数据结构,并演示了栈的初始化、入栈、出栈和打印操作。这个简单的栈示例有助于初学者理解栈的基本概念和操作。
技术笔记巩固知识要点:
-
栈的结构定义:程序使用C语言定义了一个栈结构(Stack),其中包含一个整数数组用于存储数据,以及一个指示栈顶位置的整数变量top。
-
初始化栈:initStack函数用于将栈初始化为空栈,将top设置为-1。
-
入栈操作:push函数用于将数据压入栈中。在入栈之前,需要检查栈是否已满,如果栈已满则无法入栈。
-
出栈操作:pop函数用于弹出栈顶元素,并返回该元素的值。在出栈之前,需要检查栈是否为空,如果栈为空则无法出栈。
-
打印栈中元素: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; }