链式栈的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;
    }
    
    
}
    

 

posted @ 2013-10-10 22:20  EyesFront  阅读(233)  评论(0编辑  收藏  举报