C 不使用指针的堆栈实现

C 不使用指针的堆栈实现,c,algorithm,data-structures,C,Algorithm,Data Structures,我需要实现一个非常基本的堆栈数据结构,以便在C中保留整数,而不使用指针。这是否可以仅使用阵列?简单的伪代码将受到高度赞赏 编辑:我正在使用一个名为的模型检查工具,它支持C的基本功能,我需要使用一个UPPAAL不支持的递归函数。我考虑使用自己的堆栈实现递归,因为UPPAAL不支持指针。有更好的想法吗?假设允许您对整个结构进行一次动态分配(您必须以某种方式进行分配),您可以使用整数作为偏移量: unsigned int capacity = 100; unsigned int top =

我需要实现一个非常基本的堆栈数据结构,以便在
C
中保留整数,而不使用指针。这是否可以仅使用阵列?简单的伪代码将受到高度赞赏


编辑:我正在使用一个名为的模型检查工具,它支持
C
的基本功能,我需要使用一个
UPPAAL
不支持的递归函数。我考虑使用自己的堆栈实现递归,因为
UPPAAL
不支持指针。有更好的想法吗?

假设允许您对整个结构进行一次动态分配(您必须以某种方式进行分配),您可以使用整数作为偏移量:

unsigned int capacity = 100;
unsigned int top      = 0;

int * buf = malloc(sizeof(int) * capacity);

// push:
buf[top++] = n;

// pop:
int value = buf[--top];

// empty:
int is_empty = (top == 0);

// increase capacity:
if (top == capacity)
{
    int * tmp = realloc(buf, capacity * 2 * sizeof(int));
    if (!tmp) { /* out of memory, die */ }
    buf = tmp;
    capacity *= 2;
}

// destroy
free(buf);

此代码仅用于说明;在您的实现中,您显然会检查溢出和下溢。

假设允许您对整个结构进行一次动态分配(您必须这样或那样),您可以只使用整数作为偏移量:

unsigned int capacity = 100;
unsigned int top      = 0;

int * buf = malloc(sizeof(int) * capacity);

// push:
buf[top++] = n;

// pop:
int value = buf[--top];

// empty:
int is_empty = (top == 0);

// increase capacity:
if (top == capacity)
{
    int * tmp = realloc(buf, capacity * 2 * sizeof(int));
    if (!tmp) { /* out of memory, die */ }
    buf = tmp;
    capacity *= 2;
}

// destroy
free(buf);

此代码仅用于说明;在您的实现中,您显然会检查溢出和下溢。

是否允许不必要地浪费堆栈内存?为什么允许使用数组而不使用指针?它们基本上是一样的。对指针的限制是对作业的限制,还是因为你不确定自己是否会使用它们?对我来说,闻起来像是家庭作业。我无法想象另一个不允许使用指针的场景。那你为什么有“无指针”的要求呢?那似乎不是。。。理智的。。。在非学术代码的上下文中。是否允许不必要地浪费堆栈内存?为什么允许使用数组而不使用指针?它们基本上是一样的。对指针的限制是对作业的限制,还是因为你不确定自己是否会使用它们?对我来说,闻起来像是家庭作业。我无法想象另一个不允许使用指针的场景。那你为什么有“无指针”的要求呢?那似乎不是。。。理智的。。。在非学术代码的上下文中,push execute
buf[top++]=n
,在pop execute
value=buf[top--]
值不是n之后,值是未定义的!按execute键执行[top++]=n,在弹出execute键后执行
值=buf[top-->
值不是n,值是未定义的!