来源:互联网 发布:sql中top用法 编辑:程序博客网 时间:2024/05/21 01:56

注意:为什么出栈函数的第二个参数是指针类型?

  //如果出栈函数的第二个参数不是指针类型,

 // 则c的值是不变的,即c还是原来定义时的c,不是从栈里出来的c
    //即每次都是(c-48)=-13;只有用指针,传递地址,才能改变这个值
  //让c不再是原来的c,而是从栈里出来的c。


#include<stdio.h>

#include"math.h"
#include<iostream>

using namespace std;

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef char ElemType;
typedef struct sqStack {
    ElemType *base;
    ElemType *top;
    int stacksize;
};

 void initStack(sqStack *s)
{
    s->base = (ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
    if (!s->base)
        cout << "initstack failed" << endl;
    s->top = s->base;
    s->stacksize = STACK_INIT_SIZE;
}

 void Push(sqStack*s, ElemType e)
 {
     if (s->top - s->base >= s->stacksize)
     {
         s->base = (ElemType*)realloc(s->base, (s->stacksize + STACKINCREMENT)*sizeof(ElemType));
         if (!s->base)
             cout << "push failed" << endl;
         s->top = s->base + s->stacksize;
         s->stacksize = s->stacksize + STACKINCREMENT;
     }
     *(s->top) = e;
     s->top++;
 }

 void Pop(sqStack*s, ElemType *e)    //第二个参数得用指针类型,
                                     //如果出栈函数的第二个参数不是指针类型,
                                     // 则c的值是不变的,即c还是原来定义时的c,不是从栈里出来的c
                                     //即每次都是(c-48)=-13;只有用指针,传递地址,才能改变这个值
                                     //让c不再是原来的c,而是从栈里出来的c。    
 {
     if (s->top == s->base)return;
     *e = *(--(s->top));
 }

 int StackLen(sqStack s)
 {
     return (s.top - s.base);
 }

 void main()
 {
     ElemType c;
     sqStack s;
     int len, i, sum = 0;
     cout << "please input a binary digit\n" << endl;
     initStack(&s);
     cin >> c;
     while (c != '#')
     {
         Push(&s, c);
         cin >> c;
     }
     cout << c - 48 << endl;//如果出栈函数的第二个参数不是指针类型,
                            // 则c的值是不变的,即c还是原来定义时的c,不是从栈里出来的c
                            //即每次都是(c-48)=-13;只有用指针,传递地址,才能改变这个值
                            //让c不再是原来的c,而是从栈里出来的c。
     len = StackLen(s);      
     for (i = 0; i < len; i++)
     {
         Pop(&s, &c);
         sum = sum + (c - 48)*pow(2, i);
     }
     cout << "decimal is " << sum << endl;
    
 }
0 0
原创粉丝点击