链式栈的C语言实现
#include<stdio.h> #include<malloc.h> typedef char* ElemType; typedef struct StackNode{ ElemType data; struct StackNode *next; }StackNode,*LinkStack; StackNode * initStackHeadNode( LinkStack ls); LinkStack push(LinkStack ls,ElemType e); LinkStack popTop(LinkStack ls); void traverseLinkedStack(StackNode * sn); void main(){ LinkStack ls; ls = initStackHeadNode(ls); /* int i; char a[] ={'a','b','c','d','e'}; ls = initStackHeadNode(ls); for( i = 0;i<5;i++){ ls = push(ls,a[i]); }*/ char *string = "I love you"; ls = push(ls,string); ls = push(ls,"string"); traverseLinkedStack(ls); ls =popTop(ls); printf("%p",ls); traverseLinkedStack(ls); } StackNode * initStackHeadNode( LinkStack ls){ ls=NULL; return ls; } LinkStack push(LinkStack ls,ElemType e){ LinkStack insertN; insertN = (LinkStack)malloc(sizeof(LinkStack)); insertN->next = ls; printf("%p %p",insertN->next,ls); insertN->data = e; ls = insertN; return ls; } LinkStack popTop(LinkStack top){ LinkStack p; if(!top) { printf("/n链栈是空的!"); return NULL; } //判断是否为空栈n p=top; //指向被删除的栈顶 top=top->next; //修改栈顶指针 free(p); return top; } void traverseLinkedStack(StackNode* sn){ while( sn){ printf("%s\t",sn->data); sn = sn->next; } }
海纳百川,有容乃大