马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
C语言链栈的入栈操作,调试的时候运行到(S.Head->next = p)的时候总是会跳出这个弹窗,查了好久也没找到问题,请问给位大佬到底错哪了啊?Status Push(LinkStack S, SElemType e)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
if(!p)
return ERROR;
p->data = e;
p->next = S.Head->next;
S.Head->next = p;
S.length++;
return OK;
}
这是完整的代码#include <stdio.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct L_node
{
SElemType data;
struct L_node *next;
}LNode, *LinkList;
typedef struct
{
LinkList Head;
int length;
}LinkStack;
void InitStack(LinkStack S)
{
S.Head = (LinkList)malloc(sizeof(LNode));
S.Head->next = NULL;
S.length = 0;
}
Status Push(LinkStack S, SElemType e)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
if(!p)
return ERROR;
p->data = e;
p->next = S.Head->next;
S.Head->next = p;
S.length++;
return OK;
}
Status DelNum(LinkStack S, SElemType e)
{
int i = 0;
for(LinkList p = S.Head->next; p->next != NULL; p = p->next)
{
i++;
if(p->data == e)
{
LinkList prevA = S.Head, A;
for(int j = 0; j < i-1; j++)
prevA = prevA->next;
A = prevA->next;
prevA->next = A->next;
A->next = NULL;
free(A);
}
}
return OK;
}
int main()
{
LinkStack S;
InitStack(S);
int len, e;
scanf("%d", &len);
for(int i = 0; i < len; i++)
{
scanf("%d", &e);
Push(S, e);
}
for(LinkList p = S.Head->next; p->next != NULL; p = p->next)
printf("%d ", p->data);
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct L_node {
SElemType data;
struct L_node *next;
} LNode, *LinkList;
typedef struct {
LinkList Head;
int length;
} LinkStack;
void InitStack(LinkStack &S) {
S.Head = (LinkList) malloc(sizeof(LNode));
S.Head->next = NULL;
S.length = 0;
}
Status Push(LinkStack &S, SElemType e) {
LinkList p = (LinkList) malloc(sizeof(LNode));
if (!p)
return ERROR;
p->data = e;
p->next = NULL;
p->next = S.Head->next;
S.Head->next = p;
S.length++;
return OK;
}
Status DelNum(LinkStack &S, SElemType e) {
int i = 0;
for (LinkList p = S.Head->next; p != NULL; p = p->next) {
i++;
if (p->data == e) {
LinkList prevA = S.Head, A;
for (int j = 0; j < i - 1; j++)
prevA = prevA->next;
A = prevA->next;
prevA->next = A->next;
A->next = NULL;
free(A);
}
}
return OK;
}
int main() {
LinkStack S;
InitStack(S);
int len, e;
scanf("%d", &len);
for (int i = 0; i < len; i++) {
scanf("%d", &e);
Push(S, e);
}
for (LinkList p = S.Head->next; p != NULL; p = p->next)
printf("%d ", p->data);
}
函数 InitStack(LinkStack S) 应更改为 void InitStack(LinkStack &S)。 这是因为我们需要将 LinkStack 的引用传递给函数,并在函数内部进行修改。 如果我们不使用引用,那么在函数内部所做的任何修改都不会影响 LinkStack 的原始副本。 在函数Push(LinkStack S, SElemType e)中,p->next的初始化应该是NULL,而不是S.Head->next。 另外,应该是S.Head = (LinkList)malloc(sizeof(LNode)); 而不是 (LinkList)malloc(sizeof(LinkList));。 在DelNum(LinkStack S, SElemType e)的for循环中,条件应该是p != NULL而不是p->next != NULL。
|