为什么在C中的这两个代码之间出现差异:堆栈的数组实现和堆栈的链接列表实现?

时间:2017-11-02 11:27:14

标签: c arrays struct linked-list stack

typedef int Element;

typedef struct {
    Element *stack;
    int max_size;
    int top;
} Stack;

//I added more codes..
Stack *CreateStack(int size)
{
    Stack *pStack = (Stack *)malloc(sizeof(Stack));
    if(pStack == NULL)
        return NULL;

    pStack->stack = (Element *)malloc(size * sizeof(Element));
    if(pStack->stack == NULL){
        free(pStack);
        return NULL;
    }

    pStack->max_size = size;
    pStack->top = -1;

    return pStack;

}


//this for linked list
typedef struct tStackNode{
    Element data;
    struct tStackNode *next;
} StackNode;

typedef struct {
    int count;
    StackNode *top;
} StackHead;

StackHead* CreateStack(int size)
//size is not used in linked list implmentation
{
    StackHead *pStack = (StackHead *) malloc(sizeof(StackHead));
    if(pStack == NULL)
        return NULL;
    pStack->count = 0;
    pStack->top = NULL;

    return pStack;
}

第一个用于数组,第二个用于链接列表。

我添加了更多代码来创建堆栈'。

为什么第一个使用整数指针值而第二个需要int值....

非常感谢。

1 个答案:

答案 0 :(得分:1)

在链表中,数据元素存储在每个列表节点中。

使用数组实现,数据存储在*堆栈指针指向的数组中。使用它将需要分配适当大小的堆栈并将其分配给堆栈指针。