学习笔记------数据结构(C语言版)栈应用 行编辑程序

来源:互联网 发布:英语四级考试准备知乎 编辑:程序博客网 时间:2024/05/21 21:37

//SqStack.cpp

#include "predefined.h"#include "SqStack.h"Status InitStack(SqStack *S)//构造一个空栈{(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S).base) exit(OVERFLOW);(*S).top=(*S).base;(*S).stacksize=STACK_INIT_SIZE;return OK;}Status DestroyStack(SqStack *S)//销毁栈S,S不再存在{free((*S).base);(*S).base=(*S).top=NULL;//避免野指针(*S).stacksize=0;return OK;}Status ClearStack(SqStack *S)//把S置为空栈{(*S).top=(*S).base;return OK;}Status StackEmpty(SqStack S)//若栈为空,返回TRUE{if(S.base==S.top) return TRUE;else return FALSE;}int StackLength(SqStack S)//返回栈S长度{return S.top-S.base;}Status GetTop(SqStack S,SElemType *e)//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR。{if(StackEmpty(S)) return ERROR;*e=*((S).top-1);return OK;}Status Push(SqStack *S,SElemType e)//插入元素e为新的栈顶元素{if(((*S).top-(*S).base)>=(*S).stacksize){(*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));if(!(*S).base) exit(OVERFLOW);(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT;}(*(*S).top)=e;(*S).top++;return OK;}Status Pop(SqStack *S,SElemType *e)//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR.{if((*S).base==(*S).top) return ERROR;*e=*(--(*S).top);return OK;}Status StackTraverse(SqStack S,void (*visit)(SElemType *p))//从栈底到栈顶依次对每个元素调用函数visit()。一旦visit调用失败,则操作失败{SElemType *p;p=S.base;while(p!=S.top){visit(p);p++;}return OK;}

//main.cpp

#include "predefined.h"#include "SqStack.h"FILE *fp;void PrintElem(SElemType *p){printf("%d ",*p);}void copy(SElemType *p){fputc(*p,fp);}int main(){fp=fopen("hangbianji","w");if(fp){LineEdit();fclose(fp);}elseprintf("创建失败!\n");}void LineEdit()//算法3.2:利用字符栈S,从终端接收一行并传送至调用过程的数据区{SqStack S;char ch;SElemType m;InitStack(&S);ch=getchar();while(ch!=EOF){while(ch!=EOF&&ch!='\n'){switch(ch){case'#':Pop(&S,&m);break;case'@':ClearStack(&S);break;default:Push(&S,ch);break;}ch=getchar();}StackTraverse(S,copy);fputc('\n',fp);ClearStack(&S);if(ch!=EOF) ch=getchar();}}


0 0
原创粉丝点击