【发布时间】:2021-07-09 21:35:54
【问题描述】:
我有这样的代码,通过使用堆栈来反转单链表。但是当我调用 pushStack 函数时,会出现这样的错误; "预期为 'int *' 但参数是 'int' 类型"
{
// store Node addresses in stack
struct STACK *stk;
struct Student* ptr = head;
while (ptr != NULL) {
pushStack(stk, ptr->studentnumber);
ptr = ptr->next;
}
// print data from stack
while (!emptyStack(stk)) {
printf(stk->top);
pop(); // pop after print
}
}
这是我的 pushStack 函数;
bool pushStack (struct STACK* stack, int *dataInPtr)
{
// Local Definitions
STACK_NODE* newPtr;
// Statements
newPtr = (STACK_NODE* ) malloc(sizeof(STACK_NODE));
if (!newPtr)
return false;
newPtr->dataPtr = dataInPtr;
newPtr->link = stack->top;
stack->top = newPtr;
(stack->count)++;
return true;
} // pushStack
我将 studentnumber 定义为结构中的整数。据我了解,我需要将列表转换为多链表,因此通过这种方式,我可以将 studentnumber 作为指针传递,但我希望它保留为单链表。我能做什么,如果有人有意见,我真的很感激。
【问题讨论】:
-
至少
printf(stk->top);看起来肯定是错误的。 -
使用
bool pushStack (struct STACK* stack, int data)。我猜studentnumber,你作为第二个参数传递的类型是int,而不是int *。除此之外,您的方法效率很低。您需要做的就是从头开始处理列表,反转下一个指针(您总是需要记住一个指针),最后将头部指向前一个最后一个元素。 -
当我将整数作为参数传递给 pushStack 函数时,我收到此错误“赋值使指针从整数而不进行强制转换”。因为我这样定义我的堆栈:
typedef struct node2 { void* dataPtr; struct node2* link; } STACK_NODE;我得到了一个错误newPtr->dataPtr = dataInPtr;但是为了使用堆栈也存储字符串,我应该将 dataPtr 保留为 void 指针,对吗? @pqans -
我明白,但首先要保持简单。当这可行时,使您的列表通用。下次请提供完整的代码,包括数据类型定义。
-
你的作业是否需要使用堆栈来解决这个问题?您应该能够在一次现场通行证中遍历列表并将其反转。请阅读How to Ask 并发布minimal reproducible example。
标签: c pointers linked-list singly-linked-list doubly-linked-list