码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 栈的应用——行编辑程序

时间:2016-04-11 10:16:10      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

  1 #include <stdio.h>
  2 #include <malloc.h>
  3 #include <stdlib.h>
  4 #include <math.h>
  5 
  6 #define STACK_INIT_SIZE    100        //存储空间�始分��
  7 #define STACKINCREMENT     10        //存储空间分���
  8 #define SElemType        char     //当�数�类�
  9 
 10 typedef struct
 11 {
 12     SElemType *base;        //栈底指针;
 13     SElemType *top;        //栈顶指针
 14     int stacksize;                    //当�已分�的存储空间
 15 }SqStack;
 16 
 17 SqStack InitStack()
 18 {
 19     SqStack S;
 20     S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
 21     if(!S.base)
 22     {
 23         printf("CREATE ERROR!\n");
 24         exit(OVERFLOW);            //OVERFLOW定义�math.h文件中,其值为3,exit函数定义在stdlib.h中
 25     }
 26     S.top = S.base;
 27     S.stacksize = STACK_INIT_SIZE;
 28     return S;
 29 }
 30 
 31 int StackEmpty(SqStack S)
 32 {
 33     if(S.top == S.base)
 34     {
 35         return 1;
 36     }
 37     else
 38     {
 39         return 0;
 40     }
 41 }
 42 
 43 SElemType GetTop(SqStack S)
 44 {
 45     if(S.top == S.base)
 46     {
 47         return 0;
 48     }
 49     else
 50     {
 51         return *(S.top - 1);
 52     }
 53 }
 54 
 55 SqStack Push(SqStack S, SElemType e)
 56 {
 57     if(S.top - S.base >= S.stacksize)
 58     {
 59         S.base = (SElemType*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType));
 60         if(!S.base)
 61         {
 62             printf("ERROR\n");
 63             exit(OVERFLOW);        //OVERFLOW定义�math.h文件中,其值为3,exit函数定义在stdlib.h中
 64         }
 65         S.top = S.base + S.stacksize;
 66         S.stacksize += STACKINCREMENT;
 67     }
 68     else
 69     {
 70         *(S.top++) = e;
 71     }
 72         return S;
 73 }
 74 
 75 SqStack Pop(SqStack S)
 76 {
 77     if(S.top == S.base)
 78     {
 79         printf("NULL\n");
 80         return S;
 81     }
 82     else
 83     {
 84         S.top--;
 85         return S;
 86     }
 87 }
 88 
 89 int ClearStack(SqStack S)
 90 {
 91     S.top = NULL;
 92     S.base = NULL;
 93     S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
 94     if(!S.base)
 95     {
 96         printf("CREATE ERROR!\n");
 97         exit(OVERFLOW);            //OVERFLOW定义�math.h文件中,其值为3,exit函数定义在stdlib.h中
 98     }
 99     S.top = S.base;
100     S.stacksize = STACK_INIT_SIZE;
101         return 1;
102 }
103 
104 void StackTraverse(SqStack S)
105 {
106     SElemType *p = S.base;
107     while(p != S.top)
108     {
109         printf("%c",*(p++));
110     }
111     printf("\n");
112 }
113 
114 int main()
115 {
116     SqStack S = InitStack();
117     char c;
118         printf("ÇëÊäÈ룬windowsϵͳÏÂÇëÒÔCtrl+Z½áÊøÊäÈë\n");
119     c = getchar();
120     while(c != EOF)
121     {
122         if(c != EOF)
123         {
124             switch(c)
125             {
126                 case #: S = Pop(S);break;
127                 case @: ClearStack(S);break;
128                 default: S = Push(S,c);
129             }
130         }
131         c = getchar();
132     }
133     StackTraverse(S);
134     
135 }

 

数据结构 栈的应用——行编辑程序

标签:

原文地址:http://www.cnblogs.com/yangsh1996/p/5377158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!