#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef char StackElemType;
typedef int Status;
typedef struct StackNode
{
StackElemType data;
struct StackNode *next;
} StackNode,*StackPtr;
typedef struct
{
StackPtr base;
StackPtr top;
}LinkStack;
Status InitStack(LinkStack *S)
{
S->base=S->top=(StackPtr)malloc(sizeof(StackNode));//指向头结点
if(!S->base) exit(0);
S->base->next=NULL;
return 1;
}
Status PushStack(LinkStack *S,StackElemType e)
{
StackPtr p;
p=(StackPtr)malloc(sizeof(StackNode));
p->data=e;
p->next=NULL;
p->next=S->top;
S->top=p;
return 1;
}
Status PopStack (LinkStack *S)
{
StackPtr p;
if(S->top==S->base) return 0;
p=S->top->next;
free(S->top);
S->top=p;
return 1;
}
Status GetTop(LinkStack *S,StackElemType *p)
{
if(S->top==S->base) return 0;
*p=S->top->data;
return 1;
}
Status DestroyStack(LinkStack *S)
{
while(S->base)
{
S->base=S->top->next;
free(S->top);
S->top=S->base;
}
return 1;
}
Status TraverseStack(LinkStack *S)
{
StackPtr p=S->top;
while(p!=S->base)
{
printf("%c ",p->data);
p=p->next;
}
return 1;
}
//测试呵呵呵!
void main()
{
LinkStack S;
char ch;
int n;
InitStack(&S);
while((ch=getchar())!='@')
{
PushStack(&S,ch);
}
TraverseStack(&S);
printf("\n");
printf("请输入要出栈的元素的个数\n");
scanf("%d",&n);
while(n>0)
{
PopStack (&S);
n--;
}
TraverseStack(&S);
}