#include
#include /* malloc()等 */
#include
#include
#include /* exit() */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
typedef int ElemType;
typedef struct LinkStackNode{
ElemType data;
struct LinkStackNode *next;
}LinkStack;
//构造空栈
void InitLinkStack(LinkStack *L){
L = (LinkStack *) malloc(sizeof(LinkStack));//申请内存
if(!L->data) exit(OVERFLOW);//申请失败
L->next = NULL;
}
//删除
void DestroyLinkStack(LinkStack *L){
LinkStack *p;
LinkStack *q;
p=L;
q=L->next;
while(p!=NULL){
free(p);
p=q;
p=p->next;
}
free(q);
}
Status StackLinkEmpty(LinkStack *L)
{
if(L->next==NULL)
return TRUE;
else
return FALSE;
}
//长度
int StackLength(LinkStack *L){
LinkStack *p;
int i=0;
p=L;
while(p!=NULL){
i++;
p=p->next;
}
return i;
}
//取栈顶
Status GetTop(LinkStack *L, ElemType *e)
{ if(L->next==NULL)
return ERROR;
*e = L->next->data;
return OK;
}
//进栈
void Push(LinkStack *L,ElemType e){
LinkStack *p;
p = (LinkStack *) malloc(sizeof(LinkStack));
p->data = e;
p->next = L->next;
L->next = p;
printf("%d ",e);
}
//出栈
void Pop(LinkStack *L,ElemType e){
LinkStack *p = L->next;
e = p->data;
L->next = p->next;
free(p);
}
//遍历
void StackTraverse(LinkStack *L){
LinkStack *p=L;
while(p){
p=p->next;
printf("%d",p->data);
}
printf("\n");
}
int main(){
LinkStack L;
ElemType e;
int j;
InitLinkStack(&L);
for(j=1;j<=12;j++)
Push(&L,j);
printf("栈中元素依次为:");
StackTraverse(&L);
Pop(&L,e);
printf("弹出的栈顶元素 e=%d\n",e);
printf("栈空否:%d(1:空 0:否)\n",StackLinkEmpty(&L));
GetTop(&L,&e);
printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(&L));
DestroyLinkStack(&L);
return 0;
}
后面的操作为什么没继续进行了呢