순차적 스택

12382 단어 창고
 1 #include<stdio.h>

 2 #include<stdlib.h>

 3 #define Stack_Size 100

 4 #define StackIncrement 10

 5 #define OK 1

 6 #define TRUE 1

 7 #define FALSE 0

 8 #define ERROR -1

 9 #define OVERFLOW -2

10 typedef int Status;

11 typedef struct

12 {

13     int *base;

14     int *top;

15     int stacksize;

16 }SqStack;

17 Status InitStack(SqStack &S)

18 {

19     S.base=(int *)malloc(Stack_Size*sizeof(int));

20     if(!S.base)  exit(OVERFLOW);

21     S.top=S.base;

22     S.stacksize=Stack_Size;

23     return OK;

24 }

25 Status StackEmpty(SqStack &S)

26 {

27     if(S.top==S.base)

28     return TRUE;

29     return FALSE;

30 }

31 Status StackLength(SqStack S)

32 {

33     return (S.top-S.base);

34 }

35 Status GetTop(SqStack S,int &e)

36 {

37     if(S.top==S.base)  return ERROR;

38     e=*(S.top-1);

39     return OK;

40 }

41 Status Push(SqStack &S,int e)

42 {

43     if((S.top-S.base)==S.stacksize)

44     {

45     S.base=(int *)realloc(S.base,(S.stacksize+StackIncrement)*sizeof(int));

46     if(!S.base)  exit(OVERFLOW);

47     S.top=S.base+S.stacksize;

48     S.stacksize+=StackIncrement;

49     }

50     *S.top++=e;

51     return OK;

52 }

53 Status Pop(SqStack &S,int &e)

54 {

55     if(S.top==S.base)  return ERROR;

56     e=*--S.top;

57     return OK;

58 }

59 Status PrintSqStack(SqStack S)

60 {

61     int i,length=StackLength(S);

62     puts(" :");

63     puts("********************");

64     for(i=0;i<length;i++)

65     printf("%d ",S.base[i]);

66     puts("
********************
"); 67 return OK; 68 } 69 Status main() 70 { 71 int i,e,length; 72 SqStack S; 73 InitStack(S); 74 puts(" :"); 75 scanf("%d",&length); 76 puts(" :"); 77 for(i=0;i<length;i++) 78 { 79 scanf("%d",&e); 80 Push(S,e); 81 } 82 PrintSqStack(S); 83 puts(" :"); 84 scanf("%d",&e); 85 Push(S,e); 86 PrintSqStack(S); 87 puts(" :"); 88 Pop(S,e); 89 printf(" :%d
",e); 90 PrintSqStack(S); 91 system("pause"); 92 return OK; 93 }

좋은 웹페이지 즐겨찾기