数据结构---C语言数据结构3.2.3行编辑程序

来源:互联网 发布:铜陵学院网络教学平台 编辑:程序博客网 时间:2024/06/06 17:25
#include<stdio.h>#include<stdbool.h>#include<Windows.h>#include<stdlib.h>#define STACK_INIT_SIZE 10#define STACKINCREMENT 10typedef char Status;typedef struct stack {char *base;char *top;int stacksize;}SqStack;int InitStack(SqStack *S);      //初始化栈void ClearStack(SqStack *S);    //清空栈bool StackEmpty(SqStack S);     //判断栈是否为空int StackLength(SqStack S);     //栈长int Push(SqStack *S, Status e); //入栈int Pop(SqStack *S, Status *e); //出栈int StackTraverse(SqStack S);   //遍历栈void DestroyStack(SqStack *S);  //销毁栈void LineEdit();                //行编辑子函数int main(){LineEdit();Sleep(10000);return 0;}void LineEdit(){SqStack s;Status value;int popvalue = 0;InitStack(&s);char ch;ch = getchar();while (ch != 'q'){while (ch != 'q'&&ch != '\n')   //内层while循环结束代表一行结束,外层代表另一行{switch (ch){case'#':Pop(&s, &value); break;  //break不要忘记case'@':ClearStack(&s); break;   default:Push(&s, ch);}ch = getchar();}if (ch != 'q')ch = getchar();*(s.top) = '\0';printf("当前行的内容为:%s\n",s.base);   //显示每行的内容并清空,若要保存,在这clearstack之前写入文件即可ClearStack(&s);}DestroyStack(&s);}int InitStack(SqStack *S){S->top = (Status*)malloc(sizeof(Status)*STACK_INIT_SIZE);if (S == NULL)return 0;S->base = S->top;S->stacksize = STACK_INIT_SIZE;}void DestroyStack(SqStack *S){free(S->base);S->base = S->top = NULL;S->stacksize = 0;}//栈的空间都没了void ClearStack(SqStack *S){S->top = S->base;   //局部变量*(S->top) = 0;}//栈初始化的空间还在,只是指针指向栈底bool StackEmpty(SqStack S){if (S.base = S.top)return true;elsereturn false;}int StackLength(SqStack S){return S.top - S.base;}int GetTop(SqStack S, Status *e){if (S.top != S.base){*e = *(S.top - 1);return 1;}return 0;}int Push(SqStack *S, Status e){int i = StackLength(*S);if ((S->top - S->base) >= S->stacksize){S->base = realloc(S->base, sizeof(Status)*(STACK_INIT_SIZE + STACKINCREMENT));S->top = S->base;while (i--){S->top++;}}if (!S->base)return 0;*(S->top++) = e;return 1;}int Pop(SqStack *S, Status *e){if (S->base == S->top)return 0;*e = *(--S->top);return 1;}int StackTraverse(SqStack S){Status *p = S.top;if (S.base == NULL)return 0;while (p - S.base){p--;printf("%c", *p);}printf("\n");return 1;}

阅读全文
0 0
原创粉丝点击