用栈实现行编辑程序-----检查没错,运行出错,大神帮忙看看
/*用栈实现行编辑程序*/#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define STACK_SIZE 100
typedef struct
{
char *base;
char *top;
int stacksize;
}SeqStack;
/*定义函数Initial(),实现构造栈 进栈 出栈 取栈顶元素 清空栈等 操作 */
void Initial(SeqStack *S) /*初始 化栈 */
{
S->base=(char*)malloc(STACK_SIZE*sizeof(char));
if(!S->base)
exit(-1);
S->top=S->base;
S->stacksize=STACK_SIZE;
}
int IsEmpty(SeqStack*S) /*判断 栈空 */
{
return S->top==S->top;
}
int IsFull(SeqStack*S) /*判断 栈满 */
{
return S->top-S->base==STACK_SIZE-1;
}
void Push(SeqStack *S,char x) /* 进 栈 */
{
if(IsFull(S))
{
printf("overflow");
exit(1);
}
else
*S->top++=x;
}
void Pop(SeqStack *S) /* 出 栈 */
{
if(IsEmpty(S))
{
printf("NULL");
exit(1);
}
else
--S->top;
}
char Top(SeqStack *S) /*取栈顶元素*/
{
if(IsEmpty(S))
{
printf("empty");
exit(1);
}
return*(S->top-1);
}
void ClearStack(SeqStack*S) /*清空 栈 */
{
S->top=S->base;
}
/*自定义函数LineEdit(),实现行编辑功能*/
void LineEdit(SeqStack *S) /*#号为退格符,为清空*/
{
int i=0,a[100],n;/*定义变量数据为整型*/
char ch;
ch=getchar(); /*将输入字符赋给ch*/
while(ch!='\n')
{
i++; /*记录进栈元素个数*/
switch(ch) /*判断输入字符*/
{
case'#': /*当输入字符为#时*/
Pop(S);
i-=2; /*出栈 元素个数减少两个*/
break;
case'@':
ClearStack(S);
i=0;
break;
default: /*元素不是#和@时,其余元素进行进栈操作*/
Push(S,ch);
}
ch=getchar();
}
for(n=1;n<=i;n++) /*将栈中元素存入数组中*/
{
a[n]=Top(S);
Pop(S);
}
for(n=i;n<=1;n--) /*将数组的元素输出*/
printf("%c",a[n]);
}
/*main()函数作为程序的入口程序,调用LineEdit()函数实现简单的行编辑程序*/
void main()
{
SeqStack *ST;
printf("please input: \n");
Initial(ST);
LineEdit(ST);
}