首页 > 代码库 > 一步一步学习数据结构(三)栈的顺序存储结构实现代码
一步一步学习数据结构(三)栈的顺序存储结构实现代码
//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1、 #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initStack(cStackPointer *A); //销毁栈空间 void destroyStack(cStackPointer *A); //判断栈是否为空 int isEmpty(cStackPointer A); //入栈,e是需要入栈的元素 int pushStack(cStackPointer A,dataType e); //出栈,e指向了出栈的元素 int popStack(cStackPointer A,dataType *e); //查询top栈顶元素,e指向查询的结果元素,这个函数跟出栈函数的区别就是,查询只是查询,实际并没有出栈! int getTopElement(cStackPointer A,dataType *e); //列出如果栈内元素全部出栈的出栈顺序 void displayPop(cStackPointer A); int main() { //声明指针栈变量 cStackPointer A ; int i; printf("hello world !\n\n\n"); //初始化栈A initStack(&A); //入栈 for(i=0;i<=10;i++) pushStack(A,i); //打印全部元素的出栈顺序,只是打印,并没有真正出栈 displayPop(A); //出栈操作 popStack(A,&i); putchar(‘\n‘); //打印全部元素的出栈顺序,只是打印,并没有真正出栈 displayPop(A); printf("\n\n任意键结束程序\n\n"); getchar(); return 0; } void initStack(cStackPointer *A) { if( ((*A) =(cStackPointer)malloc(sizeof(cStack))) ==null ) printf("内存不足!\n"); else { printf("初始化栈成功!\n"); (*A)->top = -1; } } void destroyStack(cStackPointer *A) { if(*A==null) { printf("栈不存在,销毁失败!\n"); return ; } else { free(*A); *A = null; } } int isEmpty(cStackPointer A) { if(A->top==-1) return 1; else return 0; } int pushStack(cStackPointer A,dataType e) { if(A->top==SIZE-1) { printf("栈已经满了,入栈失败!\n"); return -1; } else { A->top++; A->data[A->top]=e; return 0; } } int popStack(cStackPointer A,dataType *e) { if(A->top==-1) { printf("栈是空的,出栈失败!\n"); return -1; } else { //这一步的意思是,把出栈的元素保存起来,如果需要的话,就可使用它 *e = A->data[A->top]; A->top--; return 0; } } int getTopElement(cStackPointer A,dataType *e) { if(A->top==-1) { printf("栈是空的,取top元素失败!\n"); return -1; } else { //A->top--;//由于是查询操作,所以不用出栈! *e = A->data[A->top]; return 0; } } void displayPop(cStackPointer A) { if(A->top==-1) { printf("栈是空的,输出栈为空!\n"); return ; } else { int i; for(i=A->top;i>=0;i--) { printf("%d",A->data[i]); if(i==0) break; else printf("->"); } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。