昨晚写了个栈的链式存储,自己发现了一些问题,在此提出来与大家共勉:
首先上代码:
typedef struct stack{
int iData;
stack *next;
}sStack;
定义一个结构体,
存放数据。
int initStack(sStack *(&s))
{
s = (sStack *)malloc(sizeof(sStack));
s->next = NULL;
return 0;
}
初始化栈。
int inputStack(sStack *(&s), int x, int &change)
{
if(0 == change)
{
change = 1;
s->iData = x;
s->next = NULL;
}
else
{
sStack *temp;
temp = (sStack *)malloc(sizeof(sStack));
temp->iData = x;
temp->next = s;
s = temp;
printf("插入成功!");
system("pause");
}
return 0;
}
输入栈元素,这个输入栈还有别的方法,比如:当前开辟了一个空间,就给当前节点赋值,然后节点上移。
int outputStack(sStack *s)
{
sStack *temp = s;
while(s != NULL)
{
printf("%d ", s->iData);
s = s->next;
}
s = temp;
printf("\n");
system("pause");
return 0;
}
输出栈元素。
重要提示:
在调用函数的时候记着要使用 '&' 这个字符串,将 'mian' 函数中的变量使其在外函数中使用,如果直接像
int initStack(sStack *s)
{
********
}
调用的输入输出函数将无效。
这个是输出效果:
实现栈的节点移动输出:
typedef struct stack{
int iData;
stack *next;
}sStack;
int initStack(sStack *(&s))
{
s = (sStack *)malloc(sizeof(sStack));
s->next = NULL;
return 0;
}
int inputStack(sStack *(&s), int x, int &change)
{
if(0 == change)
{
change = 1;
s->iData = x;
s->next = NULL;
}
else
{
sStack *temp;
temp = (sStack *)malloc(sizeof(sStack));
temp->iData = x;
temp->next = s;
s = temp;
printf("插入成功!");
system("pause");
}
return 0;
}
int outputStack(sStack *(&s))
{
sStack *temp = s;
if(s != NULL)
{
printf("%d ", s->iData);
s = s->next;
}
free(temp);
printf("\n");
system("pause");
return 0;
}
转载请注明链接