实现堆栈定义的堆栈数组:
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}}将阻止代码运行。
我在实现堆栈数组时遇到问题,所以任何帮助都会受到赞赏:)
答案 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)
调用它(例如,推送第三个堆栈)。