• 数组指针存储在堆栈的形式


    #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--出栈,但原有的数值被删除了么,假设该栈存储利用的是数组而不是数组指针呢?




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

  • 相关阅读:
    git本地及远程分支回退
    Git怎样撤销一次分支的合并Merge
    git仓库迁移的两种解决方案
    【转】Linux下mysql操作
    Linux下tomcat相关操作
    Linux下top命令详解
    Linux下crontab详解
    Linux下mysql安装
    Linux下RPM包管理
    Linux下用户组、文件权限详解
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4791000.html
Copyright © 2020-2023  润新知