데이터 구조 - 줄 편집 프로그램
                                            
 14193 단어  데이터 구조
                    
프로그램 코드 는 다음 과 같 습 니 다:
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 #define STACK_INIT_SIZE 100
  5 #define STACKINCREMENT 10
  6 #define OVERFLOW -2
  7 #define OK 1
  8 #define ERROR 0
  9 
 10 typedef char SElemType;
 11 
 12 //    
 13 typedef struct {
 14     SElemType *base;
 15     SElemType *top;
 16     int stacksize;
 17 }SqStack;
 18 
 19 int InitStack(SqStack *S);//    
 20 int Push(SqStack *S,SElemType e);//  
 21 int Pop(SqStack *S,SElemType *e);//       
 22 int DestoryStack(SqStack *S);//   
 23 void LineEdit(SqStack *S);//     
 24 int ClearStack(SqStack *S);//       
 25 
 26 //    
 27 int InitStack(SqStack *S) {
 28     S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
 29     if(!S->base) {
 30         exit(OVERFLOW);
 31     }
 32     S->top = S->base;
 33     S->stacksize = STACK_INIT_SIZE;
 34 
 35     return OK;
 36 }
 37 
 38 //  
 39 int Push(SqStack *S,SElemType e) {
 40     if((S->top-S->base)>=S->stacksize) {
 41         S->base = (SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
 42         if(!S->base) {
 43             exit(OVERFLOW);
 44         }
 45         S->top = S->base + S->stacksize;
 46         S->stacksize += STACKINCREMENT;
 47     }
 48     *S->top++ = e;
 49     //printf("%c
",e);
 50     return OK;
 51 }
 52 
 53 //       
 54 int Pop(SqStack *S,SElemType *e) {
 55     if(S->top  == S->base) return ERROR;
 56     *e = *--S->top;
 57     return OK;
 58 }
 59 
 60 
 61 //       
 62 int ClearStack(SqStack *S) {
 63     S->top = S->base;
 64     return OK;
 65 }
 66 
 67 //   
 68 int DestoryStack(SqStack *S) {
 69     S->top = S->base;
 70     free(S->base);
 71     S->top = NULL;
 72     S->base = NULL;
 73     return OK;
 74 }
 75 
 76 //     
 77 void LineEdit(SqStack *S) {
 78     SElemType *p,ch,c;
 79     InitStack(S);
 80     ch = getchar();
 81     while(ch != EOF) {
 82         while(ch!=EOF&&ch!='
') {
 83             switch(ch) {
 84                 case '#':Pop(S,&c);break;
 85                 case '@':ClearStack(S);break;
 86                 default:Push(S,ch);break;
 87             }
 88             ch = getchar();
 89         }
 90         p = S->base;
 91         while(p!=S->top) {
 92             printf("%c",*p);
 93             ++p;
 94         }
 95         ClearStack(S);
 96         if(ch!=EOF) ch = getchar();
 97     }
 98 }
 99 
100 int main()
101 {
102     SqStack sq;
103     int f;
104     LineEdit(&sq);//      
105     DestoryStack(&sq);//    
106     return 0;
107 }이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.