现在的位置: 首页 > 综合 > 正文

顺序栈的实现[原创]

2012年08月20日 ⁄ 综合 ⁄ 共 3105字 ⁄ 字号 评论关闭

 

  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

抱歉!评论已关闭.