不使用指针的堆栈实现

时间:2012-07-28 18:51:42

标签: c algorithm data-structures

我需要实现一个非常基本的堆栈数据结构,以便在C中保持整数而不使用指针。这只能使用数组吗?简单的伪代码将受到高度赞赏。

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

1 个答案:

答案 0 :(得分:3)

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

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);

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