链栈的初始化,建立,插入,查找,删除。
--
代码 //////////////////////////////////////////// //链栈的初始化,建立,插入,查找,删除。 // //Author:Wang Yong // //Date: 2010.8.19 // //////////////////////////////////////////// #include <stdio.h> #include <stdlib.h> typedef int ElemType; /////////////////////////////////////////// //定义链栈的结构类型 typedef struct StackNode { ElemType data; //栈的数据 struct StackNode *next; //指针域 } StackNode,*LinkStack; ////////////////////////////////////////// //链栈的初始化 LinkStack LinkStackInit() { LinkStack top; //构造一个空栈 top = (StackNode *)malloc(sizeof(StackNode)); if(!top) printf("OVERFLOW\n"); top = NULL; return top; } ///////////////////////////////////////// //判断栈空的算法 int LinkStackEmpty(LinkStack top) { if(!top) return 1; else return 0; } //////////////////////////////////////// //进栈的算法 LinkStack LinkStackPush(LinkStack top,ElemType x) { LinkStack p; p = (StackNode *)malloc(sizeof(StackNode)); //创建一个结点 p->data = x; //设置结点的数据域 p->next = top; //设置结点的指针域 top = p; //设置新的栈顶 return top; } //////////////////////////////////////// //出栈的算法 ElemType LinkStackPop(LinkStack &top)//出栈的时候必须判断是否栈空 { LinkStack p; ElemType x; if(top != NULL) { x = top->data; //取栈顶元素 p = top; //将栈顶结点重置 top = top->next; free(p); //释放原栈顶结点空间 } else printf("stack empty!\n"); return x; } int main() { LinkStack lstack; lstack = LinkStackInit(); ElemType x; printf("请输入进栈的元素:"); while(scanf("%d",&x) != EOF) { lstack = LinkStackPush(lstack,x); } LinkStack p; for(p = lstack;p != NULL; p = p->next) printf("%d ",p->data); printf("出栈的结果为:"); while(lstack != NULL) printf("%d ",LinkStackPop(lstack)); return 0; }
--
作者:柒月
Q群 :2122210(嵌入式/机器学习)