
栈空的条件:s->next=NULL
栈满的条件:不考虑
进栈操作:将包含e的结点插入到头节点之后
退栈操作:取出头节点之后节点的元素并删除
###代码块
1 2 3 4 5 6 7
|
typedef struct linknode { ElementType data; struct linknode *next; }LiStack;
|
/初始化/
1 2 3 4 5
|
void (LiStack *&s) { s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL; }
|
/销毁栈/
1 2 3 4 5 6 7 8 9 10 11
|
void DestroyStack (LiStack *&s) { LiStack *p=s,*q=s->next; while(q!=NULL) { free(p); p=q; q=p->next; } free(p); }
|
/栈是否为空/
1 2 3 4 5 6
|
bool StackEmpty(LiStack *s) { return(s->next==NULL); }
|
/进栈/
1 2 3 4 5 6 7 8 9 10
|
void Push(LiStack *&s,Element e) { LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=s->next; s->next=p; }
|
/出栈/
1 2 3 4 5 6 7 8 9 10 11 12 13
|
bool Pop(LiStack *&s,Element &e) { LiStack *p; if(s->next==NULL) { return false; } p=s->next; e=p->data; s->next=p->next; free(p); }
|
/取栈顶元素/
1 2 3 4 5 6 7 8
|
bool GetTop(LiStack *s,Element &e) { if(s->next==NULL) return false; e=s->next->data; return true; }
|
近期评论