栈的链表实现
linked lists implementation of stack
#include "stdio.h"
#include "stdlib.h"
struct node_type {
int data;
struct node_type *next;
};
struct stack_type{
node_type *top;
int length;
};
void push(node_type *head,stack_type stack);
int main()
{
struct stack_type stack;
node_type *list;
list = (node_type *)malloc(sizeof(node_type));
list->next = NULL;
node_type *head;
head = list;
stack.length = 0; //set stack empty
push(head, stack);
list = head->next;
printf("The entegers are:");
do {
printf("%d", stack.top->data);
list = list->next;
stack.top = list;
} while (list->next != 0);
system("pause");
return 0;
}
void push(node_type *head,stack_type stack)
{
int i, n;
node_type *p;
p = (node_type*)malloc(sizeof(node_type));
p = head;
printf("Enter the integers(0 to end):");
for (;;) {
scanf("%d", &n);
if (n == 0)
break;
stack.top->data = n;
p->next = stack.top;
stack.length++;
}
}
我debug的时候说p->next=NULL然后stop,这个我不清楚
为什么我错了?如何修复它,我不清楚 NULL 和 top finger 的使用
提前感谢您的回答。
两个问题:首先在 main
函数中你没有初始化 stack.top
意味着它将有一个 indeterminate 值,取消引用这个看似随机的指针就像你在 push
函数中所做的那样会导致 未定义的行为 .
第二个问题是您将 stack
结构按值 传递给 push
,这意味着它被复制并且所有更改都在 push
函数只在结构的本地副本上完成。您需要通过使用指针和地址运算符 &
.
来模拟按值 传递
程序没有意义。
它是用 C 结构编写的,但像 C++ 程序一样编译。
函数 push
完全错误。
void push(node_type *head,stack_type stack)
{
int i, n;
node_type *p;
p = (node_type*)malloc(sizeof(node_type));
p = head;
//...
堆栈按值接受。因此原始堆栈不会改变。存在内存泄漏,因为分配内存后指针 p
被重新分配。对象 stack
的数据成员 top
未初始化。所以这个声明
stack.top->data = n;
导致程序出现未定义的行为。
首先,您应该将您的程序编译为 C 程序。在这种情况下,编译器将报告许多错误,因为没有名称声明
node_type
和 stack_type
。
所以即使是第二个结构声明也是无效的
struct stack_type{
node_type *top;
^^^^^^^^^^^^^^
int length;
};
一定有
struct stack_type{
struct node_type *top;
^^^^^^^^^^^^^^^^
int length;
};
函数 push
至少应该像
那样声明
void push( struct stack_type *stack, int data );
它应该只做一件事:将 data
的 vakue 压入堆栈。
考虑到不带参数的函数 main 应声明为
int main( void )
函数的定义push
可以这样看
void push( struct stack_type *stack, int data );
int main( void )
{
struct stack_type stack = { NULL, 0 };
//...
int data;
while ( scanf( "%d", &data ) == 1 && data != 0 )
{
push( &stack, data );
}
//...
}
void push( struct stack_type *stack, int data )
{
struct node_type *node = malloc( sizeof( struct node_type ) );
if ( node != NULL )
{
node->data = data;
node->next = stack->top;
stack->top = node;
++stack->length;
}
}
#include "stdio.h"
#include "stdlib.h"
struct node_type {
int data;
struct node_type *next;
};
struct stack_type{
node_type *top;
int length;
};
void push(node_type *head,stack_type stack);
int main()
{
struct stack_type stack;
node_type *list;
list = (node_type *)malloc(sizeof(node_type));
list->next = NULL;
node_type *head;
head = list;
stack.length = 0; //set stack empty
push(head, stack);
list = head->next;
printf("The entegers are:");
do {
printf("%d", stack.top->data);
list = list->next;
stack.top = list;
} while (list->next != 0);
system("pause");
return 0;
}
void push(node_type *head,stack_type stack)
{
int i, n;
node_type *p;
p = (node_type*)malloc(sizeof(node_type));
p = head;
printf("Enter the integers(0 to end):");
for (;;) {
scanf("%d", &n);
if (n == 0)
break;
stack.top->data = n;
p->next = stack.top;
stack.length++;
}
}
我debug的时候说p->next=NULL然后stop,这个我不清楚
为什么我错了?如何修复它,我不清楚 NULL 和 top finger 的使用 提前感谢您的回答。
两个问题:首先在 main
函数中你没有初始化 stack.top
意味着它将有一个 indeterminate 值,取消引用这个看似随机的指针就像你在 push
函数中所做的那样会导致 未定义的行为 .
第二个问题是您将 stack
结构按值 传递给 push
,这意味着它被复制并且所有更改都在 push
函数只在结构的本地副本上完成。您需要通过使用指针和地址运算符 &
.
程序没有意义。
它是用 C 结构编写的,但像 C++ 程序一样编译。
函数 push
完全错误。
void push(node_type *head,stack_type stack)
{
int i, n;
node_type *p;
p = (node_type*)malloc(sizeof(node_type));
p = head;
//...
堆栈按值接受。因此原始堆栈不会改变。存在内存泄漏,因为分配内存后指针 p
被重新分配。对象 stack
的数据成员 top
未初始化。所以这个声明
stack.top->data = n;
导致程序出现未定义的行为。
首先,您应该将您的程序编译为 C 程序。在这种情况下,编译器将报告许多错误,因为没有名称声明
node_type
和 stack_type
。
所以即使是第二个结构声明也是无效的
struct stack_type{
node_type *top;
^^^^^^^^^^^^^^
int length;
};
一定有
struct stack_type{
struct node_type *top;
^^^^^^^^^^^^^^^^
int length;
};
函数 push
至少应该像
void push( struct stack_type *stack, int data );
它应该只做一件事:将 data
的 vakue 压入堆栈。
考虑到不带参数的函数 main 应声明为
int main( void )
函数的定义push
可以这样看
void push( struct stack_type *stack, int data );
int main( void )
{
struct stack_type stack = { NULL, 0 };
//...
int data;
while ( scanf( "%d", &data ) == 1 && data != 0 )
{
push( &stack, data );
}
//...
}
void push( struct stack_type *stack, int data )
{
struct node_type *node = malloc( sizeof( struct node_type ) );
if ( node != NULL )
{
node->data = data;
node->next = stack->top;
stack->top = node;
++stack->length;
}
}