采用了C语言来构建无头结点的链栈:
#include#include #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("%dt", L->data); L = L->next; } } int main() { SnodeL s; Snode_init(&s); Snode_insert(&s); Snode_clear(&s); travel_Snode(s); return 0; }
唯一不解的是:为什么传递一级指针不行,传递一级指针的过程就像是在传递形参一样:
调用压栈函数之后,外部的遍历s任然保持不变;
只能通过二级指针修改(对用的压栈函数处的参数也需要变成二级指针)
唯一的疑惑是:这里传递指针等级的区别在哪里?为什么传递一级指针不行?
希望有大佬能帮忙看一看,解解惑。



