【发布时间】:2017-09-16 16:49:40
【问题描述】:
我正在尝试使用链表实现堆栈。这是我的代码:
#include<stdio.h>
//implementation of stack
struct Node{
int data;
struct Node* next;
struct Node* prev;
};
struct Stack{
struct Node* headNode;
struct Node* presentNode;
int size;
};
struct Node* newNode()
{
struct Node* node;
return node;
}
struct Stack* newStack()
{
struct Stack* stack;
stack->headNode = newNode();
stack->presentNode = stack->headNode;
stack->size=0;
return stack;
}
int isempty(struct Stack* s)
{
if(s->headNode->next != NULL)
return 0;
return 1;
}
void push(struct Stack* s,int data)
{
struct Node* node = newNode();
node->data = data;
node->next = NULL;
s->presentNode->next = node;
node->prev = s->presentNode;
s->presentNode = node;
s->size ++;
}
int pop(struct Stack*s)
{
if(isempty(s)==1)
return 0;
int data = s->presentNode->data;
s->presentNode->prev->next = NULL;
s->presentNode = s->presentNode->prev;
s->size --;
return data;
}
int main()
{
struct Stack* stack = newStack();
int data = 0,type;
printf("Enter '1' if new element to be added or '0' if the latest element is to be deleted.\n");
while(data!=-1)//unbounded stack
//takes input until data==-1
{
scanf("%d",&type);
if(type)
{
printf("Enter the element:\t");
scanf("%d",&data);
if(data==-1)
continue;
push(stack,data);
}
else
printf("%d is popped out of the list!\n",pop(stack));
}
return 0;
}
但我收到了run-time error。由于我是指针新手(我是 Java 人),我很困惑我的错误在哪里,尽管我确信这是由于指针。
【问题讨论】:
-
您没有为堆栈分配任何内存(调用 malloc)。此时,您所拥有的只是一大碗未定义的行为,因为您的指针指向任何内容。
-
创建新节点时没有分配内存。请参阅您的
struct Node* newNode()函数。你错过了malloc()。 -
把Java放在一边。学习 C 就好像你对编程一无所知。除了花括号编程语言之外,两者几乎没有任何共同之处。如果你过分依赖 Java 直觉,只会自取其辱。
标签: c pointers data-structures linked-list stack