#include <stdlib.h>
typedef struct LSNode
{
char data;
struct LSNode* next;
}LSNode,*SNode;
typedef struct LSk
{
SNode top;
}LSk,*LStack;
void InitLStack(LStack LS)
{
if(LS==NULL)
{
LS=(LStack)malloc(sizeof(LSk));
}
LS->top=NULL;
}
char Peek(LStack LS)
{
return LS->top->data;
}
void Push(LStack LS,char value)
{
SNode p;
p=(SNode)malloc(sizeof(LSNode));
p->data=value;
p->next=LS->top;
LS->top=p;
}
char Pop(LStack LS)
{
SNode p;
char res;
p=LS->top;
if(p==NULL)
return 27;
res=p->data;
LS->top=p->next;
free(p);
return res;
}
void ClearStack(LStack LS)
{
char c;
c=Pop(LS);
while(c!=27)
{
c=Pop(LS);
}
}
void Print(LStack LS)
{
SNode p;
p=LS->top;
while(p)
{
printf("%c,",p->data);
p=p->next;
}
printf("/n");
}
int main()
{
LStack ls;
char res;
ls=(LStack)malloc(sizeof(LSk));
InitLStack(ls);
res=getchar();
while(res!='/n')
{
switch(res)
{
case '#':
Pop(ls);break;
case '@':
ClearStack(ls);break;
default:
Push(ls,res);
}
res=getchar();
}
printf("Result is as follow:/n");
Print(ls);
getch();
return 0;
}