我用vs2010实现链栈的基本操作,最后我想打印出所有元素,为什么出来的是乱码啊
你的代码错误很多,你的节点都是往链表前面插入的,如果不带头节点,初始化函数就没有任何意义了。
带头和不带头的代码都给你写了,如下:
带头节点的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LinkStack
{
struct LinkStack* next;
ElemType data;
}LS;
//初始化
LS* InitStack(LS* s)
{
s = (LS*)malloc(sizeof(LS));
s->next = 0;
return s;
}
//打印所有元素
void my_printf(LS* s)
{
LS* p;
if (s == 0)
{
printf("链表为空\n");
return;
}
p = s->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//入栈
void PushStack(LS* s, ElemType x)
{
LS* p = (LS*)malloc(sizeof(LS));
p->data = x;
p->next = s->next;
s->next = p;
}
//出栈
void PopStack(LS* s)
{
LS* p;
if (s == 0 && s->next == 0)
{
printf("栈为空\n");
return ;
}
p = s->next;
s->next = p->next;
free(p);
}
int main()
{
LS* s=0;
s = InitStack(s);
PushStack(s, 2);
PushStack(s, 4);
PushStack(s, 3);
my_printf(s);
return 0;
}
不带头的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LinkStack
{
struct LinkStack* next;
ElemType data;
}LS;
//打印所有元素
void my_printf(LS* s)
{
LS* p;
if (s == 0)
{
printf("链表为空\n");
return;
}
p = s;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//入栈
LS* PushStack(LS* s, ElemType x)
{
LS* p = (LS*)malloc(sizeof(LS));
p->data = x;
p->next = s;
return p;
}
//出栈
LS* PopStack(LS* s)
{
LS* p;
if (s == 0 )
{
printf("栈为空\n");
return 0;
}
p = s->next;
free(s);
s = p;
return s;
}
int main()
{
LS* s=0;
//s = InitStack(s);
s = PushStack(s, 2);
s = PushStack(s, 4);
s = PushStack(s, 3);
my_printf(s);
return 0;
}
只能乱码,问题不少。
其他程序也乱码吗,如果不是那应该是入栈出栈的部分有问题
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!