栈的创建,压栈,出栈,遍历,清空,判断是否为空
//栈的算法演示 视频p33
#include<bits/stdc++.h>
typedef struct Node{
int data;
struct Node *pNext;
}Node,*pNode;
typedef struct Stack{
pNode Top;
pNode Bottom;
}Stack,*pStack; //pStack等价于struct Stack*
void init(pStack pS){
pS->Top=(pNode)malloc(sizeof(Node));
pS->Bottom=pS->Top;
pS->Top->pNext=NULL;
return;
}
void push(pStack pS,int val){
pNode pNew=(pNode)malloc(sizeof(Node));
pNew->data=val;
pNew->pNext=pS->Top;
pS->Top=pNew;
return;
}
void traverse(pStack pS){
pNode p=pS->Top;
while(p!=pS->Bottom){
printf("%d ",p->data);
p=p->pNext;
}
printf("\n");
return;
}
bool empty(pStack pS){
if(pS->Top==pS->Bottom)
return true;
else
return false;
}
//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,并返回出栈成功与否
bool pop(pStack pS,int *pVal){
if(empty(pS)) //pS本身存放的就是S的地址
return false;
else{
pNode p=pS->Top;
*pVal=p->data;
pS->Top=pS->Top->pNext;
free(p);
p=NULL;
return true;
}
}
void clear(pStack pS){
if(empty(pS))
return;
else{
pNode p=pS->Top,q;
while(p!=pS->Bottom){
q=p->pNext;
free(p);
p=q;
}
pS->Top=pS->Bottom;
return;
}
}
int main()
{
int val;
Stack S;
init(&S); //创建一个空栈
push(&S,1);
push(&S,2);
traverse(&S);
// clear(&S);
if(pop(&S,&val))
printf("出栈成功,出栈的元素是%d\n",val);
else
printf("出栈失败\n");
traverse(&S);
}