链栈函数
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 0
typedef int ElempType;
typedef struct LNode{
ElempType data;
struct LNode* next;
}Node;
Node* InitStack( ){ //链栈的初始化
Node* s=(Node*)malloc(sizeof(Node));
s->next = NULL;
return s;
}
void DestroyStack( Node* top ){ //链栈的销毁
Node* p = top->next;
while( top->next!=NULL ){
top->next = p->next;
free(p);
p = top->next;
}
}
void PrintStack(Node* top){ //从栈顶打印
Node* p = top;
while( p->next != NULL ){
printf("%d ",p->next->data);
p = p->next;
}
}
int Push(Node* top, ElempType x){ //入栈
Node* s = (Node*)malloc(sizeof(Node));
if(s==NULL) {
printf(" 申请节点失败\n");
return ERROR;
}
s->data = x;
s->next = top->next;
top->next = s;
return OK;
}
int DeleteStack(Node* top){ //删除栈顶元素 ,成功返回OK,or ERROR
Node* p = top->next;
if( top->next==NULL ) {
printf("链栈为空\n");
return ERROR;
}
top->next = p->next;
free(p);
return OK;
}
int Pop(Node* top, ElempType* ptr){ //出栈,并用指针返回删除的值 ,成功返回OK,or ERROR
Node* p = top->next;
if( top->next==NULL ) {
printf("链栈为空\n");
return ERROR;
}
*ptr = p->data;
top->next = p->next;
free(p);
return OK;
}
int GetTop(Node* top, ElempType* ptr){ //取栈顶的元素,用指针返回元素值,成功返回OK or ERROR
if( top->next==NULL ){
printf("链栈为空\n");
return ERROR;
}
*ptr = top->next->data;
return OK;
}
int Empty(Node* top){ //判空操作,返回true or flase
if( top->next==NULL ) return TRUE;
return FLASE;
}