【问题标题】:Why does the difference emerge between this two codes in C: Array Implementation for Stack and Linked List Implementation for Stack?为什么 C 中的这两个代码之间会出现差异:堆栈的数组实现和堆栈的链表实现?
【发布时间】:2017-11-02 11:27:13
【问题描述】:
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值....

非常感谢。

【问题讨论】:

  • 对于列表,每个节点代表一个单个值,对吧?因此,节点只包含一个Element 值是有道理的。对于堆栈,stack 是指向数组第一个元素的指针。
  • 缺少一些信息,显示更多代码。
  • 因为它们的实现方式不同?第一个将动态分配元素并将它们挂钩到堆栈顶部,第二个动态分配节点。
  • @Someprogrammerdude 谢谢。数组呢?它不需要包含任何值吗?
  • @MichaelWalz 谢谢。我添加了更多关于创建堆栈的信息。我可以向您展示整个问题,但 stackexchange 阻止了太多代码问题..

标签: c arrays struct linked-list stack


【解决方案1】:

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

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

【讨论】:

  • 啊,那么数组实现是否需要一些其他内存来放置真实数据?
  • 是的,可以是 malloc'd 或模块可用的静态/全局数组。
猜你喜欢
  • 2013-03-17
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多