#include<stdio.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 pStack){
pStack->pTop=(PNODE)malloc(sizeof(NODE));
if(NULL==pStack->pTop){
printf("动态内存分配失败\n");
exit(-1);
}else{
pStack->pBottom=pStack->pTop;
pStack->pTop->pNext=NULL;//指针域清空 可以改为pStack->pBottom->pNext=NULL
}
}
//进栈操作
void push(PSTACK pStack,int val){
PNODE pNew =(PNODE)malloc(sizeof(NODE));
pNew ->pNext=pStack->pTop;
pNew ->data=val;
pStack->pTop=pNew;
return;
}
void traverse(PSTACK pStack){
PNODE p=pStack->pTop;
while(p!=pStack->pBottom){
printf("%d ",p->data);
p=p->pNext;
}
printf("\n");
return;
}
//判断是否有为空栈
bool empty(PSTACK pStack){
if(pStack->pBottom==pStack->pTop){
return true;
}else{
return false;
}
}
//出栈
bool pop(PSTACK pStack,int *pVal){
if(empty(pStack)){
return false;
}else{
PNODE r=pStack->pTop;
pStack->pTop=r->pNext;
free(r);
r=NULL;
return true;
}
}
void clear(PSTACK pStack){
if(empty(pStack)){
return ;
}else{
PNODE p=pStack->pTop;
PNODE q=NULL;
while(p!=pStack->pBottom){
q=p->pNext;
free(p);
p=q;
}
pStack->pTop=pStack->pBottom;
}
}
int main(int argc, char* argv[])
{ int a;
STACK s;
init(&s);
push(&s,1);
push(&s,2);
push(&s,3);
traverse(&s);
clear(&s);
traverse(&s);
scanf("%a",&a);
return 0;
}