首页 > 代码库 > 数组指针存储形式的栈
数组指针存储形式的栈
#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!\n"); else{ printf("Init Fail!\n"); return ERROR; } printf("input data:(Terminated by inputing a character)\n"); 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("\n1-createStack\n"); CreateStack(&ss); printf("\n2-Pop&Print\n"); PrintStack(&ss); printf("\n"); return 0; }
关于出栈中的e=S->top-1,理论上e保存的是S->top-1地址,而这个地址又保存着S->top-1存放的值,那么e也应该指向该值,
同时尽管S->top--出栈,但原有的数值被删除了么,如果该栈存储利用的是数组而不是数组指针呢?
数组指针存储形式的栈
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。