采用了C语言来构建无头结点的链栈:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
#define OK 1
#define FALSE 0
typedef int ElemType;
typedef struct node
{
struct node* next;
int data;
}Snode,*SnodeL;
//初始化
int Snode_init(SnodeL *L)//传入相当于头指针的二级指针
{
(*L)= NULL;//*L是解引用
return OK;
}
//压栈
int Snode_insert(SnodeL *L)
{
int i = 0;
int num = 0;
printf("请输入你要入栈的个数>");
scanf("%d", &num);
for (i; i < num; i++)
{
Snode* p = (SnodeL)malloc(sizeof(Snode));
printf("请输入元素");
scanf("%d", &p->data);
p->next =*L;
*L = p;
}
}
//访问栈顶元素
int Stack_pop(SnodeL *L)
{
if (!(*L))
{
exit(FALSE);
}
return (*L)->data;
}
//清空栈表
int Snode_clear(SnodeL* L)
{
if (!(*L))
{
return -23444;
}
while (*L)
{
Snode* p = *L;
*L = p->next;
free(p);
}
//销毁
//free(*L);
return OK;
}
//遍历元素
void travel_Snode(SnodeL L)
{
if (!L)
{
printf("it's empty");
}
while (L)
{
printf("%d\t", L->data);
L = L->next;
}
}
int main()
{
SnodeL s;
Snode_init(&s);
Snode_insert(&s);
Snode_clear(&s);
travel_Snode(s);
return 0;
}
唯一不解的是:为什么传递一级指针不行,传递一级指针的过程就像是在传递形参一样:
调用压栈函数之后,外部的遍历s任然保持不变;
只能通过二级指针修改(对用的压栈函数处的参数也需要变成二级指针)
唯一的疑惑是:这里传递指针等级的区别在哪里?为什么传递一级指针不行?
希望有大佬能帮忙看一看,解解惑。