#define OK 1
#define ERROR 0
#define FALSE 0
#define TRUE 1
#define OVERFLOW -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Status;
typedef int SElemType;
typedef struct Node{
SElemType data;
struct Node *next;
}SNode,*LinkStack;
//构造链栈
Status InitStack(LinkStack *S)
{
*S=NULL;
return OK;
}
//压栈
Status Push(LinkStack *S,SElemType e)
{
//插入e作为栈顶元素
SNode *p;
p=(SNode*)malloc(sizeof(SNode));
p->data=e;
p->next=*S;
*S=p;
return OK;
}
//弹出
Status Pop(LinkStack *S,SElemType *e){
//删除栈顶元素,用e返回其值
SNode *p;
if(*S==NULL)
return ERROR;
else{
p=*S;
*e=p->data;
free(p);
return OK;
}
}
//求长度
int StackLength(LinkStack S){
SNode *p;
int count=0;
p=S;
while(p){
p=p->next;
count++;
}
return count;
}
//返回栈顶元素
Status GetTop(LinkStack S,SElemType *e){
if(S==NULL)return ERROR;
*e = S->data;
return OK;
}
//遍历
Status PrintStack(LinkStack S){
SNode *p;
p=S;
if(p->next==0)
return ERROR;
while(p){
printf("%d\t",p->data);
p=p->next;
}
return OK;
}
//判空
Status StackEmpty(LinkStack S){
if(S->next==0)
return OK;
return ERROR;
}
//清空
Status ClearStack(LinkStack S){
SNode *p,*q;
p=S->next;
S->next=NULL;
while(p){
q=p->next;
free(p);
p=q;
}
return OK;
}
# include "stdio.h"
# include "stdlib.h"
# include "LinkStack.h"
void main()
{
LinkStack S;
int choice;
if(InitStack(&S)==OK)
printf("success!\n");
else
printf("fail!\n");
while(choice)
{
system("cls");
printf("1.Push 2.Pop 3.StackLength 4.GetTop \n");
printf("5.PrintLinkStack 6.StackEmpty 7.ClearStack \n");
printf("--------------------0.Exit------------------\n");
printf("enter the choice:");
scanf("%d",&choice);
switch(choice)
{
case 0:
printf("byebye!\n");
break;
case 1:
{
SElemType e;
int i;
int n;
printf("请输入你将要输入的数据个数n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("enter the elem:");
scanf("%d",&e);
Push(&S,e);
}
break;
}
case 2:
{
SElemType e;
int date;
date=Pop(&S,&e);
if(date>0)
printf("The pop elem is : %d\n",e);
else
printf("The stack is empty!\n");
break;
}
case 3:
{
printf("The length is %d.\n",StackLength(S));
break;
}
case 4:
{
SElemType e;
if(GetTop(S,&e)==ERROR)
printf("fail!");
else
printf("The top elem is:%d.\n",e);
break;
}
case 5:
{
if(PrintStack(S)==ERROR)
printf("The stack is empty!\n");
break;
}
case 6:
{
if(StackEmpty(S)==OK)
printf("The satck is empty!\n");
else
printf("The stack isn't empty!\n");
break;
}
case 7:
{
if(ClearStack(S)==OK)
printf("The stack is clear!\n");
else
printf("The stack isn't clear!\n");
break;
}
}
system("pause");
}
}