C 实现链式栈codeblocks和VC2012通过
来源:互联网 发布:天津中兴研究所 知乎 编辑:程序博客网 时间:2024/05/08 12:40
#include <stdio.h>#include<stdlib.h>#define MAX_LEN 10010typedef struct node{ char data; struct node *next;}Node;typedef struct liStack{ Node *top;}LiStack;void initStack(LiStack *s);void destoryStack(LiStack *s);void push(LiStack *s,char c);void pop(LiStack *s);void getTop(LiStack *s);void lenStack(LiStack *s);void dispStack(LiStack *s);void emptyStack(LiStack *s);int main(){ LiStack *t;t=(LiStack*)malloc(sizeof(LiStack)); initStack(t); push(t,'a'); push(t,'b'); dispStack(t); lenStack(t); pop(t); getTop(t); pop(t); //pop(t); emptyStack(t); destoryStack(t); //free(t); return 0;}void initStack(LiStack *s){s->top=NULL;}void destoryStack(LiStack *s){ Node *p,*q; p=q=s->top; free(s); while(p!=NULL) { q=p->next; free(p); p=q; } free(p); free(q); printf("des ok\n");}void push(LiStack *s,char c){ Node *p; p=(Node *)malloc(sizeof(Node)); p->data=c; p->next=s->top; s->top=p; printf("push ok!\n");}void pop(LiStack *s){ char c; Node *p; if(s->top!=NULL) { p=s->top; s->top=s->top->next; c=p->data; printf("%c\n",c); }}void getTop(LiStack *s){ char c; if(s->top!=NULL) { c=s->top->data; printf("current top:%c\n",c); }}void lenStack(LiStack *s){ int n=0; Node *p=s->top; while(p!=NULL) { n++; p=p->next; } printf("%d\n",n);}void dispStack(LiStack *s){ Node *p=s->top; printf("top->"); while(p) { printf("%c->",p->data); p=p->next; } printf("NULL\n");}void emptyStack(LiStack *s){ if(s->top==NULL) printf("it's empty\n");}
中间有个测试pop函数的调用。可以根据具体的要求更爱参数。要学好数据结构真的是需要动手做,自己慢慢调试。研一的菜鸟。。。