链栈的实现LinkStack

来源:互联网 发布:传感器网络的支撑技术 编辑:程序博客网 时间:2024/06/07 15:12
#i
#include<stdio.h>
#include<stdlib.h>#include<malloc.h>typedef  int DataType ;//栈节点类型typedef struct Node{DataType data;struct Node *next;}  Node,*pNode;//栈类型typedef struct LinkStack{pNode top;int stacksize;} LinkStack,*pLinkStack;pLinkStack  InitLinkStack();void ClearLinkStack(pLinkStack s);void DestroyLinkStack(pLinkStack s);void Push(pLinkStack s,DataType x);void Pop(pLinkStack s,DataType *x);int  GetLinkStackSize(pLinkStack s);DataType GetTop(pLinkStack s );int IsLinkStackEmpty(pLinkStack s);void LinkStackTraverse(pLinkStack s, void (*Visit)(DataType data) );void print(DataType data);pLinkStack  InitLinkStack(){pLinkStack s=(pLinkStack) malloc(sizeof( LinkStack)) ;if(!s) {s->stacksize=0;s->top=NULL; }return s;}void ClearLinkStack(pLinkStack s){DataType data;while( s->stacksize ){Pop(s,&data);}}void DestroyLinkStack(pLinkStack s){if( s->stacksize)ClearLinkStack(s);free(s);}void Push(pLinkStack s,DataType x){pNode p=(pNode ) malloc( sizeof(Node)) ;if( !p )exit(-1);p->data=x;p->next=NULL;p->next=s->top ;s->top=p;s->stacksize++;}void Pop(pLinkStack s,DataType *x){if(s->stacksize==0){printf("the linkstack is null.can't pop anything\n");*x='\0'; }else {pNode p=s->top;*x=p->data;s->top=s->top->next;s->stacksize--;free(p);}}int  GetLinkStackSize(pLinkStack s){return s->stacksize;}DataType GetTop(pLinkStack s ){if(s->stacksize==0){printf("the linkstack is null");return 0;}else{return s->top->data;}}int IsLinkStackEmpty(pLinkStack s){if(s->stacksize==0)return 1;elsereturn 0;}void LinkStackTraverse(pLinkStack s, void (*Visit)(DataType data) ){pNode p=s->top;while(p){Visit(p->data) ;p=p->next;}}void print(DataType data){printf("%d ",data);}int main(){pLinkStack s=InitLinkStack();int  i;printf("gettop :\n");for( i=0 ;i<100;i++){Push(s,i);DataType datatop= GetTop(s);printf("%d ",datatop);}printf("\nIsLinkStackEmpty %d",IsLinkStackEmpty(s) );printf("\n traverse the LinkStack:\n");LinkStackTraverse(s ,print);printf("\n the current LinkStack' size :%d\n",GetLinkStackSize(s) );DataType data;Pop(s,&data);printf("Pop %d \n",data);printf("\n the current LinkStack' size :%d\n",GetLinkStackSize(s) );Pop(s,&data);        printf("Pop %d \n",data);printf("LinkStack clear!\n");ClearLinkStack(s);printf("LinkStack destroy!\n");DestroyLinkStack(s);}


0 0
原创粉丝点击