C语言 压入/插入堆栈的算法

mklgxw1f  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(141)

新手到C在这里和以下在线书籍教程。(我一直在尝试链表,但现在有点复杂,将返回到这些稍后。)我有以下算法:

Algorithm: PUSH (STACK, ITEM)
[STACK is an array of MAXSIZE and ITEM is an item to be pushed onto
stack]
1. [Check for stack overflow]
If TOP = MAXSIZE - 1 then
a) Print: Overflow
b) Return
2. [Increase top by 1]
Set TOP = TOP + 1
3. [Insert item in new top position]
Set STACK[TOP] = ITEM
4. Return

但是,我不明白步骤1,对于Top,我应该如何初始化它,因为Top应该指示一些预先存在的值?例如:
(My尝试)

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

int push(int item, int(*stack)[item]){
    int top;
    if(top == sizeof(*stack)/sizeof(*stack[0])-1){
        printf("Overflow");
        return -1;
    }
    top++;
    *stack[top] = item;
    return **stack;
}

int main(void){
    int arr[4] = {0 , 1, 2, 3};
    int itm = 2;
    int result;
    result = push(itm, &arr);
    printf("\nResult: %i", result);
    return 0;
}

总是会产生溢出

4si2a6ki

4si2a6ki1#

你只需要存储top的当前值,并将它和栈沿着发送到任何地方。你应该定义一个struct,如下所示:

typedef struct Stack {
    int stack[16]; // Replace 16 with desired capacity.
    int top;
} Stack;

创建一个新堆栈,如下所示:

Stack s = { .top = -1 };

现在你所有的函数都应该接收一个指向这个堆栈的指针,像push这样的函数应该更新top的值。

相关问题