#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 pS);//栈的初始化,做一个空栈
void push(PSTACK pS,int val);//对栈进行压入元素
void traverse(PSTACK pS);//对栈进行遍历
bool pop(PSTACK pS,int *pval);//弹出栈的元素,并且记录元素的值
bool empty(PSTACK pS);
int main()
{
PSTACK pS=(PSTACK)malloc(sizeof(STACK));
int val;
init(pS);
push(pS,1);
push(pS,2);
push(pS,3);
pop(pS,&val);
traverse(pS);
printf("弹出栈的元素为%d\n",val);
traverse(pS);
return 0;
}
void init(PSTACK pS)
{
pS->pTop=(PNODE)malloc(sizeof(NODE));
pS->pBottom=pS->pTop;
pS->pBottom->pNext=NULL;
}
void push(PSTACK pS, int val)
{
PNODE pNew=(PNODE)malloc(sizeof(PNODE));
pNew->pNext=pS->pTop;
pNew->data=val;
pS->pTop=pNew;
}
void traverse(PSTACK pS)
{
PNODE p=(PNODE)malloc(sizeof(NODE));
p=pS->pTop;
while(p!=pS->pBottom)
{
printf("数据为%d\n",p->data);
p=p->pNext;
}
}
bool empty(PSTACK pS)
{
if(pS->pTop==pS->pBottom)
{
return true;
}
else
{
return false;
}
}
bool pop(PSTACK pS,int *pval)
{
if(empty(pS))
{
return false;
}
else
{
PNODE r=(PNODE)malloc(sizeof(NODE));
*pval=pS->pTop->data;
r=pS->pTop;
pS->pTop=pS->pTop->pNext;
free(r);
r=NULL;
return true;
}
}
为了让C可以使用bool类型,该源码在CPP下运行