在C中实现一个堆栈数组

时间:2009-11-12 09:10:10

标签: c arrays data-structures stack

实现堆栈定义的堆栈数组:

typedef struct StackNode {

   int data;

   StackNode* next;

} StackNode;

每个数组元素指向一个堆栈,每个堆栈初始化为一个空堆栈。 当您开始添加元素时,它将开始将它们添加到Stacks[0];中的堆栈中 如果您在stdin中说-2,然后在4中说Stacks[4];,则下一个条目将转到5 10 -2 3 9 7 89 -1 will result in : Stacks[0] -> 10 -> 5 Stacks[1] Stacks[2] Stacks[3] -> 89 -> 7 -> 9

例如:

-1

{{1}}将阻止代码运行。

我在实现堆栈数组时遇到问题,所以任何帮助都会受到赞赏:)

6 个答案:

答案 0 :(得分:2)

的第3行
typedef struct StackNode {
   int data;
   StackNode* next;          /* line 3 */
} StackNode;

类型StackNode尚不存在。只有在完全解析类型StackNode后,类型struct StackNode才会开始存在。

但是struct StackNode类型已经存在。它仍然不完整,但您可以声明它的指针。

typedef struct StackNode {
   int data;
   struct StackNode* next;          /* line 3 */
} StackNode;

答案 1 :(得分:2)

int t = 0, index = 0;
while(t != -1)
{
  scanf("%d", &t);
  if(t == -2)
  {
    scanf("%d", &t);
    index = t;
    continue;
  }
  if(t >= 0)
    push(stacks[index], t);
}

答案 2 :(得分:1)

您可以尝试以下(测试过):

//includes
#define SIZE 10


typedef struct StackNode{
 int data ;
 struct StackNode* next ;
}StackNode ;



StackNode* new_stackNode(int num)
{
 StackNode* ptr = (StackNode*)malloc(sizeof(StackNode)) ;
 ptr->data = num ;
 ptr->next = 0 ;
 return ptr ;
}



int main()
{
 StackNode *arr[SIZE] = {0};
 int st_index = 0 ;
 int num = 0 ;
 while(num != -1)
 {
  scanf("%d",&num);
  if( num == -2 )
  st_index++ ;
  else
  {
   StackNode* ptr = new_stackNode(num) ;
   ptr->next = arr[st_index] ;
   arr[st_index] = ptr ;
  }
 }
}

答案 3 :(得分:0)

这看起来不像是一个堆栈,它看起来像一个链表。当然,您可以使用链表实现类似堆栈的语义,但它通常不是“堆栈”的含义。

要推送新号码,您需要:

  • 分配新的StackNode
  • 使用新号码初始化它。
  • 将其链接到上一个。

您可以将其封装到一个函数中:

void stack_push(StackNode *root, int value)
{
    /* Code omitted */
}

然后你只需要提供正确的堆栈,以控制你的多个堆栈中的哪一个推送新号码:

stack_push(&Stacks[2], 4711);

答案 4 :(得分:0)

如果你转到this Wikipedia article的底部,你会看到一个我想要实现的想法的例子。你有一个链表。此外,这里还有一些方便的doubly linked list helpers可以作为示例。

如果按原样发布代码的实际使用情况,您可能会收到更好(更具体)的答案。

答案 5 :(得分:0)

您必须首先获得StackNode s:

的数组
StackNode ** stacks = malloc(sizeof(StackNode*) * 5); /* allocate 5 stack nodes */
stacks[0] = malloc(sizeof(StackNode)); /* allocate first stack */
...

现在你有了一个函数push(StackNode *, int value)。要推送某个堆栈,请使用push(stacks[2], value)调用它(例如,推送第三个堆栈)。