• 行编辑


    #include<stdio.h>
    #include<malloc.h>

    typedef char SElemType;

    #include "stack.h"
    #define EOFILE '&'

    int visit(SElemType * e)
    {
      printf("%c", *e);
    }

    void LineEdit()
    {
      pSqstack S,T;
      char str[1000];
      int strlen=0;
      char e;
      char ch;

      InitStack(&S);
      InitStack(&T);

      ch=getchar();
      while(ch!=EOFILE)
       {
        while(ch!=EOFILE&&ch!='\n')
         {
           switch(ch){
     case '#':
       Pop(S,&ch);
       break;
     case '@':
       ClearStack(S);
       break;
     default:
       Push(S,ch);
       break;
     }
           ch=getchar();
         }
        if(ch=='\n')
          Push(S,ch);
          while(!StackEmpty(*S))
           {
      Pop(S,&e);
      Push(T,e);
           }
          while(!StackEmpty(*T))
           {
      Pop(T,&e);
      str[strlen++]=e;
           }
        if(ch!=EOFILE) ch=getchar();
      }
      str[strlen]='\0';
      printf("\n%s",str);

      DestroyStack(S);
      DestroyStack(T);
    }

    main()
    {
      printf("\n\n\n\n");
      LineEdit();
      printf("\n\nWelcome to visit http://zmofun.yeah.net !");
      getch();
    }

    stack.h

    #ifndef _STACK_H_
    #define _STACK_H_

    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define EQUAL 1
    #define OVERFLOW -1
    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT 10

    struct STACK
    {
      SElemType *base;
      SElemType *top;
      int stacksize;
    };

    typedef struct STACK SqStack;
    typedef struct STACK *pSqstack;

    int InitStack(SqStack **S);
    void DestroyStack(SqStack *S);
    int ClearStack(SqStack *S);
    int StackEmpty(SqStack S);
    int StackLength(SqStack S);
    int GetTop(SqStack S,SElemType *e);
    int Push(SqStack *S,SElemType e);
    int Pop(SqStack *S,SElemType *e);
    #endif

    stack.c

    #include "stack.h"
    int InitStack(SqStack **S)
    {
      (*S)=(SqStack *)malloc(sizeof(SqStack));
      (*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;
    }

    void DestroyStack(SqStack *S)
    {
     free(S->base);
     free(S);
    }

    int ClearStack(SqStack *S)
    {
      S->top=S->base;
    }

    int StackEmpty(SqStack S)
    {
      if(S.top==S.base) return TRUE;
      else
        return FALSE;
    }

    int StackLength(SqStack S)
    {
      int i;
      SElemType *p;
      i=0;
      p=S.top;
      while(p!=S.base)
        {p++;
         i++;
        }
    }

    int GetTop(SqStack S,SElemType *e)
    {
      if(S.top==S.base) return ERROR;
      *e=*(S.top-1);
      return OK;
    }

    int 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)exit(OVERFLOW);
         S->top=S->base+S->stacksize;
         S->stacksize += STACKINCREMENT;
       }
      */

      *(S->top++)=e;
      return OK;
    }

    int Pop(SqStack *S,SElemType *e)
    {
      if(S->top==S->base) return ERROR;
      *e=*--S->top;
      return OK;
    }

  • 相关阅读:
    BUPT复试专题—最长连续等差子数列(2014软院)
    BUPT复试专题—奇偶求和(2014软件)
    BUPT复试专题—网络传输(2014网研)
    Hopscotch(POJ 3050 DFS)
    Backward Digit Sums(POJ 3187)
    Smallest Difference(POJ 2718)
    Meteor Shower(POJ 3669)
    Red and Black(poj 1979 bfs)
    测试
    Equations(hdu 1496 二分查找+各种剪枝)
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/2035172.html
Copyright © 2020-2023  润新知