zoukankan      html  css  js  c++  java
  • 数组指针存储在堆栈的形式

    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    #define ERROR 0
    #define OK 1
    #define STACK_INT_SIZE 10  /*存储空间初始分配量*/
    typedef  int ElemType; /*定义元素的类型*/
    typedef struct{
        ElemType *base;
        ElemType *top;
    
    }SqStack;
    
    int InitStack(SqStack *S);   /*构造空栈*/
    int push(SqStack *S,ElemType e); /*入栈*/
    int Pop(SqStack *S,ElemType *e);  /*出栈*/
    int CreateStack(SqStack *S);     /*创建栈*/
    void PrintStack(SqStack *S);   /*出栈并输出栈中元素*/
    
    int InitStack(SqStack *S){
        S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType));
    
    
        if(!S->base) return ERROR;
        S->top=S->base;
        return OK;
    }/*InitStack*/
    
    int Push(SqStack *S,ElemType e){
      if(S->top-S->base==STACK_INT_SIZE) //推断栈满
          return ERROR;
    *(S->top)=e;//S->top=&e是错的
    S->top++;
    return OK;
    
    }/*Push*/
    
    int Pop(SqStack *S,ElemType *e){
    
         if(S->base==S->top) 
    return ERROR;
    *e=*(S->top-1);//e=S->top-1为啥是错的呢
    S->top--;
    return OK; 
    
    }/*Pop*/
    
    int CreateStack(SqStack *S){
        int e;
        if(InitStack(S))
            printf("Init Success!
    ");
        else{
            printf("Init Fail!
    ");
            return ERROR;
        }
        printf("input data:(Terminated by inputing a character)
    ");
        while(scanf("%d",&e))
            Push(S,e);
        return OK;
    }/*CreateStack*/
    
    void PrintStack(SqStack *S){
        ElemType e;
        while(Pop(S,&e))
            printf("%3d",e);
    }/*Pop_and_Print*/
    
    int main(){
        SqStack ss;
        printf("
    1-createStack
    ");
        CreateStack(&ss);
        printf("
    2-Pop&Print
    ");
        PrintStack(&ss);
    	printf("
    ");
        return 0;
    }   	

    关于出栈中的e=S->top-1,理论上e保存的是S->top-1地址,而这个地址又保存着S->top-1存放的值,那么e也应该指向该值,
    同一时候虽然S->top--出栈,但原有的数值被删除了么,假设该栈存储利用的是数组而不是数组指针呢?




    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    new一个对象的时候,实际做了些什么
    ES6 class——getter setter音乐播放器
    vue中引入公用过滤器?
    this详解下
    012天this详解上
    011天之跨域资源共享CORS
    010天JSON.stringify()详解
    009天之跨浏览器的事件处理程序
    使用XHR上传文件要不要了解一下?
    简单化最小化语句数
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4791000.html
Copyright © 2011-2022 走看看