C:使用列表的数组的最后一个元素

标签 c arrays list struct

我有这些函数,用于从一组有序对中创建凸边界。如果有人熟悉格雷厄姆扫描,那么我相信它将有助于理解这些函数的本质。不管怎样,每个函数的用途都有描述。

我认为 popBack 工作不正常,我将其他两个函数放在了一些反馈中。欢迎提出有关如何修复 popBack 和其他可能错误的建议。

typedef struct
{
    float x;
    float y;
 } point;

typedef struct
{
    int size;
    int capacity;
    point *values;
} list;


// Remove the last item from the list
void popBack(list *p)
{
    int x;
    if (p->size > 0){
        x = p->size - 1;
        p->values[x] = p->values[x + 1];
    }
}

// Return the last item from the list
point getLast(list *p)
{
    point value;
    value = p->values[p->size];
    return value;
}

// Return the next to the last item
point getNextToLast(list *p)
{
    point value;
    value = p->values[p->size - 1];
    return value;
}

最佳答案

通常,pop 函数会删除列表末尾的项目,并返回它。否则你可以简单地将其实现为

void popBack(list *p) {
    if (p->size == 0)
        return;
    p->size--;
}

如果你想返回一个值,那么:

point popBack(list *p) {
    int indexLast = p->size - 1; /* index of the last element in the list */
    if (indexLast < 0)
        return 0; /* error */
    p->size = indexLast;         /* also happens to be the new size after one element is removed */
    return p[indexLast];
}

目前,您的代码可能没有执行其应该执行的操作的原因是因为这一行:

    p->values[x] = p->values[x + 1];

获取列表的最后一个元素,并分配最后一个元素之后的元素的值,这由于各种原因都是有问题的。

关于C:使用列表的数组的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710636/

相关文章:

对象数组中的javascript排序元素

Android - 如何访问另一个列表中列表的元素数据?

c++ - 两个 Sprite 列表的碰撞 - SFML 2.0

c - 非阻塞 UDP 端口打开时打开文件失败

java - java 对象数组

C sleep 功能不起作用

arrays - 如何在Kotlin中将多维数组转换为多维列表?

python - Pandas 获取 A 列中 B 列中每个唯一值的唯一值列表

c - C 中的类型不匹配

c - 再次在 Unix 中递归管道