c - 不使用指针的堆栈实现

标签 c algorithm data-structures

我需要实现一个非常基本的堆栈数据结构,以便在不使用指针的情况下在 C 中保存整数。这可能只使用数组吗?简单的伪代码将不胜感激。

编辑:我正在使用一个名为 UPPAAL 的模型检查工具支持 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);

这段代码只是为了说明;在您的实现中,您显然会检查溢出和下溢。

关于c - 不使用指针的堆栈实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11703739/

相关文章:

C 代码与阴影结构声明的混淆行为

c - 声明意外行为

c - 将 0 表示为 gnss 坐标的负数

algorithm - 4 个皇后和 1 个马攻击 8*8 棋盘上的所有方 block

r - 守卫城墙的士兵——作业

c++ - 如何实现一个在一种情况下具有明显不同实现的类?

c++ - 寻找 C/C++ 语言和标准库规范

c++ - 用 C++ 设计 map

c# - 表示用于查找的三元图数据

java - 在数据结构中存储边