|
发表于 2023-12-6 20:36:09
|
显示全部楼层
本楼为最佳答案
下面是一个简单的顺序栈的实现,包含了插入、删除和取栈顶元素等基本操作:
- #include <stdio.h>
- #define MAXSIZE 100
- typedef struct {
- int data[MAXSIZE];
- int top;
- } SqStack;
- // 初始化栈
- void InitStack(SqStack *stack) {
- stack->top = -1; // 栈为空时,top为-1
- }
- // 判断栈是否为空
- int IsEmpty(SqStack *stack) {
- return stack->top == -1;
- }
- // 判断栈是否已满
- int IsFull(SqStack *stack) {
- return stack->top == MAXSIZE - 1;
- }
- // 插入元素
- int Push(SqStack *stack, int value) {
- if (IsFull(stack)) {
- printf("栈已满,无法插入元素\n");
- return 0;
- }
- stack->data[++stack->top] = value;
- return 1;
- }
- // 删除元素
- int Pop(SqStack *stack) {
- if (IsEmpty(stack)) {
- printf("栈已空,无法删除元素\n");
- return 0;
- }
- stack->top--;
- return 1;
- }
- // 取栈顶元素
- int GetTop(SqStack *stack) {
- if (IsEmpty(stack)) {
- printf("栈已空,无栈顶元素\n");
- return 0;
- }
- return stack->data[stack->top];
- }
- // 输出栈的元素
- void PrintStack(SqStack *stack) {
- if (IsEmpty(stack)) {
- printf("栈为空\n");
- return;
- }
- printf("栈的元素为:");
- for (int i = 0; i <= stack->top; i++) {
- printf("%d ", stack->data[i]);
- }
- printf("\n");
- }
- int main() {
- SqStack stack;
- InitStack(&stack);
-
- Push(&stack, 1);
- Push(&stack, 2);
- Push(&stack, 3);
- Push(&stack, 4);
- PrintStack(&stack); // 输出:栈的元素为:1 2 3 4
- Pop(&stack);
- Pop(&stack);
- PrintStack(&stack); // 输出:栈的元素为:1 2
- int top = GetTop(&stack);
- printf("栈顶元素为:%d\n", top); // 输出:栈顶元素为:2
-
- return 0;
- }
复制代码
注意,这只是一个简单的顺序栈实现,没有考虑栈的动态扩容等情况。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |
|