AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 数据结构

简单的行编辑器

51自学网 2015-09-08 http://www.51zixue.net

#include <stdlib.h>         /* For _MAX_PATH definition */
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>


#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10


struct SqStack
{
 char *base;
 char *top;
 int stacksize;
};

void InitStack(SqStack &S)
{
 S.base=(char*)malloc(STACK_INIT_SIZE *sizeof(char));
 if (!S.base)
  exit(1);
 S.top=S.base;
 S.stacksize=STACK_INIT_SIZE;
}

void push(SqStack &S,char e)
{
 if(S.top-S.base>=S.stacksize)
 {
  S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
  if (!S.base)
   exit(1);
  S.top=S.base+S.stacksize;
  S.stacksize+=STACKINCREMENT;
 }
 *S.top++=e;
}

char pop(SqStack &S,char &e)
{

 if (S.top==S.base)
      return false;
 e=*--S.top;
 return e;
}

void ClearStack(SqStack &S)
{
 S.top=S.base;
}

void DestroyStack(SqStack &S)
{
 free(S.base);
 S.top=S.base;
}

bool StackEmpty(SqStack &S)
{
 if (S.top==S.base)
  return true;
 return false;
}

/*void PrintStack(SqStack &S)
{
 char e;
 while (!StackEmpty(S))
 {
  pop(S,e);
  printf("%d",e);
 }
}*/

void main()
{
 char ch,e;
 SqStack S,D;
 InitStack(S);
 InitStack(D);
 ch=getchar();
 while (ch!=EOF)
 {
  while(ch!=EOF&&ch!='/n')
  {
   switch(ch)
   {
   case'#':pop(S,e);break;
   case'@':ClearStack(S);break;
   default:push(S,ch);break;
   }
   ch=getchar();
  }
  while (!StackEmpty(S))
  {
   e=pop(S,e);
   push (D,e);
   
  }
  while (!StackEmpty(D))
  {
   e=pop(D,e);
   printf("%c",e);
  }
  ClearStack(S);
  if(ch!=EOF)
   ch=getchar();
 }
 DestroyStack(S);
}

 

 

 
上一篇:数据结构教程&nbsp;第十三课&nbsp;队列  下一篇:排序及查找方法