顺序栈的实现[原创]

 

  1/*========================顺序栈的实现===================================*/
  2#include <stdio.h>
  3#include <malloc.h>
  4
  5#define STACK_INIT_SIZE 100
  6#define STACKINCREMENT 10
  7        
  8typedef struct{  /*顺序栈的类型定义*/
  9    char *base;
 10    char *top;
 11    int stacksize;
 12}
sqstack;
 13
 14
 15
 16int visit(char p){
 17    if(p>=65&&p<=97)/*-----visit函数用与栈的遍历调用,判断一个字母是否是大写字母-----------*/
 18        return 1;
 19    else
 20        return 0;
 21}

 22
 23
 24void print(sqstack s)/*----依次输出栈中元素的函数-----*/
 25    char *p,*q;
 26    p=s.top;
 27    q=s.base;
 28    printf("The stack :");
 29    while(p!=q){
 30        printf("%c ",*(p-1));
 31        p--;
 32    }

 33    printf("\n");
 34}

 35
 36
 37/*==========================================================================*/
 38/*==========================对栈进行的操作==========================*/
 39/*==========================================================================*/
 40
 41int initstack(sqstack *s){         /*------构造一个空栈----*/
 42    s->base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));  /*--成员运算符的优先级高于指针运算符---*/
 43    s->base=s->top;
 44    if(!s->base)    return 0;
 45    s->stacksize=STACK_INIT_SIZE;/*=====顺序栈,初值不为0=====*/
 46    return 1;
 47}

 48
 49
 50
 51int destroystack(sqstack *s){      /*----------销毁栈-----------*/
 52    free(s->base);
 53}
                                 /*?????????????????destroystack与 clearstack的区别????????????????????*/
 54
 55int clearstack(sqstack*s){       /*----------清空栈-----------*/
 56    s->top=s->base;
 57}

 58
 59
 60
 61int stackempty(sqstack s){       /*----若空则返回 1 -------算法4*/
 62    if(s.top==s.basereturn 1;
 63    else    return 0;
 64}

 65
 66
 67
 68int stacklength(sqstack *s){   /*----------返回栈的元素个数----------*/
 69    int i=0;
 70    char *p,*q;
 71    p=s->top;
 72    q=s->base;
 73    while(p!=q){
 74        i++;
 75        p--;
 76    }

 77    return i;
 78}

 79
 80
 81
 82char gettop(sqstack s){    /*----------用e返回栈顶元素的值-----------*/
 83    if(stackempty(s)) return 0;
 84    return *(s.top-1);
 85}

 86
 87
 88
 89int push(sqstack *s,char e){      /*---------压栈------------*/
 90    /*若栈满,追加存储空间*/
 91    *(s->top++)=e;
 92    s->stacksize++;
 93}

 94
 95
 96
 97
 98int pop(sqstack *s,char *e){      /*---------若栈顶不为空,则删除栈顶元素------------*/
 99    if(s->top==s->base)  return 0;
100    *e=*(--s->top);
101    return 1;
102}

103
104
105
106
107int stacktraverse(sqstack s){    /*---------遍历一个栈------------*/
108    char *p;
109    p=s.top;
110    while(p!=s.base){
111        if(visit(!*p)) return 0;
112       p--;
113    }

114    return 1;
115}

116
117
118
119
120/*========================主函数部分=====================================*/
121
122
123
124main(){
125    int i;
126    char *k=NULL,a='A',elem1,elem2;
127
128    sqstack *sa=NULL,stack;
129    sa=&stack;
130
131    initstack(sa);/*-------调用构造函数构造一个sa指向的空栈---------*/
132    for(i=1;i<=10;i++){
133        push(sa,a++);/*---------循环调用压栈函数向栈中压入10个元素------------*/
134    }

135    print(stack);
136
137    /*----------gettop(*sa,&elem1)-----------*/
138            printf("The top elem of stack:%c \n",elem1=gettop(stack));
139
140    /*----------stacklength(sa)-----------*/
141    printf("There are %d elements in this stack\n",stacklength(sa));
142
143
144    if(stacktraverse(*sa))  printf("dou shi da xie zi mu\n");
145    else printf("wu da xie zi mu\n");
146
147
148    k=&elem2;
149    pop(sa,k);     /*---------------------算法8*/
150            printf("After pop ,");
151            print(stack);
152            printf("There are %d elements in this stack\n",stacklength(sa));
153
154
155getch();
156}

157
158
159
160
161
162
163

 

posted @ 2009-07-25 10:11  林田惠  阅读(349)  评论(0编辑  收藏  举报


.
    ;  `┣━┒ ; `.┣─┒`   . .   ;   `.        
   .┟━┃┍╄┓┟━│ ╃━  `     、.    
` ┝─┃┣╈┤┣━┃;/ ╈ ╰⌒ˋのˊ  
 . ┗━┘┗┸┛└━┛/┃┻ `.   ′ ˋ `