用户输入的数据,并存入用户数据区。当用户输入错误时,输入#时表示上一字符无效(出栈),输入@表示当前输入行整行无效(清空栈)。
typedef struct stack
{
char *top;
char *base;
int size;
}*PLinkNode;
void Init(PLinkNode &Q)
{
Q=(PLinkNode)malloc(sizeof(stack));
Q->size=10;
Q->top=Q->base=(char *)malloc(sizeof(char)*Q->size);
}
void Push(PLinkNode &Q,char ch)
{
if(Q->top-Q->base == Q->size)
{
Q->base=(char *)realloc(Q->base,sizeof(char)*(Q->size+10));
Q->size+=10;
}
*(Q->top)++=ch;
}
void Pop(PLinkNode &Q)
{
if(Q->base==Q->top)
{
return;
}
else
{
Q->top--;
}
}
void printStack(PLinkNode Q)
{
char *p;
p=Q->base;
while(p != Q->top)
{
cout<<*p++;
}
cout<<endl;
}
void DestoryStack(PLinkNode &Q)
{
free(Q->base);
free(Q);
}
int EmptyStack(PLinkNode Q)
{
if(Q->base==Q->top)
{
return 0;
}
else
{
return 1;
}
}
void ClearStack(PLinkNode &Q)
{
Q->top=Q->base;
}
int main()
{
int i;
int n;
PLinkNode Q;
Init(Q);
char *ch;
ch=(char *)malloc(sizeof(char)*20);
cout<<"请输入字符串:";
cin>>ch;
n=strlen(ch);
for(i=0; i<n; i++)
{
if(ch[i] =='#')
{
Pop(Q);
}
else if(ch[i]=='@')
{
ClearStack(Q);
}
else
{
Push(Q,ch[i]);
}
}
printStack(Q);
DestoryStack(Q);
return 0;
}