栈可以看做是链表的一种特殊形式,是在链表上加不同的约束条件实现的。
# include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct Node{ int data; struct Node * pNext; }NODE,*PNODE; typedef struct Stack{ PNODE pTop; PNODE pBottom; }STACK,* PSTACK; void init(PSTACK); void push(PSTACK,int); void traverse(PSTACK); bool pop(PSTACK,int*); int main(void){ STACK S;//STACK 等价于 struct Stack init(&S); push(&S,1); push(&S,2); //traverse(&S); system("Pause"); return 0; } int init(PSTACK pS){ pS->pTop = (PNODE)malloc(sizeof(NODE)); if (NULL == pS->pTop){ printf("动态内存分配失败\n"); exit(-1); } else{ pS->pBottom = pS->pTop; pS->pTop->pNext = NULL; } } void push(PSTACK pS,int val){ PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = val; pNew->pNext = pS->pTop; pS->pTop = pNew; } void traverse(PSTACK pS){ PNODE p = pS->pTop; while (p!=pS->pBottom){ printf("%d",p->data); p = p->pNext; } printf("\n"); } bool empty(PSTACK pS){ if (pS->pTop == pS->pBottom){ return true; } return false; } bool pop(PSTACK pS,int *val){ PNODE r; if (!empty(pS)){ r = pS->pTop; *val = r->data; pS->pTop = pS->pTop->pNext; free(r); r = NULL; return true; } return false; } void clear(PSTACK pS){ if (empty(pS)){ return ; } else{ PNODE p = pS->pTop; PNODE q = NULL; while ( p !=pS->pBottom){ q = p->pNext; free(p); p = q; } pS->pTop = pS->pBottom; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。