#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
//#define OVERFLOW -1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;
FILE *fp;
typedef struct SqStack
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
{
printf("malloc filed!");
exit(0);
}
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestoryStack(SqStack &S)
{
free(S.base);
S.top=NULL;
S.base=NULL;
S.stacksize=0;
return OK;
}
Status ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
{
printf("error");
exit(0);
}
S.top=S.base+S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
Status StackTraverse(SqStack S,Status(*visit)(SElemType))
{
while(S.top>S.base)
visit(*S.base++);
printf("\n");
return OK;
}
Status Copy(SElemType c)
{
fputc(c,fp);
return OK;
}
void lineEdit()
{
SqStack S;
SElemType ch,c;
InitStack(S);
printf("请输入一个文本文件,^Z结束。\n");
ch=getchar();
while(ch!=EOF)
{
while(ch!=EOF && ch!='\n')
{
switch(ch)
{
case '#':Pop(S,c);
case '@':ClearStack(S);
default:Push(S,ch);
}
ch=getchar();
}
StackTraverse(S,Copy);
ClearStack(S);
fputc('\n',fp);
if(ch!=EOF)
ch=getchar();
}
DestoryStack(S);
}
void main()
{
fp=fopen("ED.txt","w");
if(fp)
{
lineEdit();
fclose(fp);
}
else
{
printf("建立文件失败!\n");
}
}
数据结构(C语言)读书笔记7:栈:行编辑程序C代码
最新推荐文章于 2021-05-21 02:43:26 发布