顺序栈 系统管理员 2022-04-22 03:06 185阅读 0赞 ## 栈: ## 限定仅在表尾进行插入和删除操作的线性表。因此,对于栈来说,表尾有其特殊含义,称为栈顶,相应地,表头称为栈底。不含元素的空表称为空栈。 栈是一种“后进先出”的线性表,有压栈出栈两种操作方式。如下图: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0_size_16_color_FFFFFF_t_70][] 栈的表现形式有链栈和顺序栈。这里只提及顺序栈。 ### **顺序栈的存储** ### 需要注意:非空栈中的栈顶指针始终在栈顶元素的下一个位置。 typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; ## ## ### 栈的初始化 ### bool InitStack(SqStack *S) { S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base) { printf("Storage allocation failure"); exit(0); } S->top=S->base; return true; } ## ## ### 获得栈顶元素 ### SElemType GetTop(SqStack *S) { return *(S->top-1);//top总是指向空,top-1指向栈顶元素 } ### 入栈 ### bool Push(SqStack *S,SElemType e) { if(S->top-S->base>=S->stacksize) { S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) { printf("Storage allocation failure"); exit(0); } S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return true; } ### 出栈 ### bool Pop(SqStack *S) { if(S->top==S->base) return false; --S->top; return true; } ### 判断栈是否为空 ### bool Empty(SqStack *S) { if(S->top==S->base) return true; else return false; } ### 销毁栈 ### void Del(SqStack *S) { free(S->base); } 为了使用的方便,将上述函数封装成头文件,代码合成如下 //栈 //dacao //2018/10/31 #ifndef _STACK_H_ #define _STACK_H_ #include<stdio.h> #include<stdbool.h>//bool型头文件 #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define SElemType int typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; /*初始化栈*/ bool InitStack(SqStack *S) { S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base) { printf("Storage allocation failure"); exit(0); } S->top=S->base; return true; } //获得栈顶元素 SElemType GetTop(SqStack *S) { return *(S->top-1);//top总是指向空,top-1指向栈顶元素 } //入栈 bool Push(SqStack *S,SElemType e) { if(S->top-S->base>=S->stacksize) { S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) { printf("Storage allocation failure"); exit(0); } S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return true; } bool Pop(SqStack *S) { if(S->top==S->base) return false; --S->top; return true; } bool Empty(SqStack *S) { if(S->top==S->base) return true; else return false; } void Del(SqStack *S) { free(S->base); } #endif 下面代码简单将其应用于十进制转化成八进制: #include"stdio.h" #include"stack.h" //十进制转换成八进制 void conversion(SqStack *S,int N) { InitStack(S); while(N) { Push(S,N%8); N=N/8; } while(!Empty(S)) { printf("%d",GetTop(S)); Pop(S); } Del(S); } int main() { SqStack S; int N=15; conversion(&S,N); return 0; } 栈的练习: [通过栈实现进制的转换][Link 1] [迷宫求解——栈的实现][Link 2] [栈实现运算表达式的求解][Link 2] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0_size_16_color_FFFFFF_t_70]: /images/20220422/e20af3c27060418fa7fd264e0d544075.png [Link 1]: https://blog.csdn.net/sinat_38816924/article/details/79235032 [Link 2]: https://blog.csdn.net/sinat_38816924/article/details/79235640
相关 顺序栈 \define OK 1 \define ERROR 0 \define TRUE 1 \define FALSE 0 \define INFEASIBLE - ╰+攻爆jí腚メ/ 2022年08月25日 05:27/ 0 赞/ 150 阅读
相关 顺序栈 2016年7月23日12:43:45 顺序栈的基本运算 include <stdio.h> define STICKSIZE 100 冷不防/ 2022年07月16日 13:29/ 0 赞/ 158 阅读
相关 顺序栈 转自http://blog.sina.com.cn/s/blog\_1513d729e0102wem6.html 顺序栈的实现(利用数组实现 ╰+哭是因爲堅強的太久メ/ 2022年07月15日 16:07/ 0 赞/ 166 阅读
相关 顺序栈 对全局变量有些依赖,要改进 include <iostream> using namespace std; typedef int elemType; 以你之姓@/ 2022年07月14日 07:23/ 0 赞/ 194 阅读
相关 顺序栈 顺序栈(C++) // //Description:顺序栈 // include <iostream> include <malloc 谁借莪1个温暖的怀抱¢/ 2022年06月18日 01:56/ 0 赞/ 143 阅读
相关 顺序栈 include<stdio.h> define maxsize 6 /顺序栈的容量/ typedef struct { int 「爱情、让人受尽委屈。」/ 2022年06月16日 13:15/ 0 赞/ 161 阅读
相关 顺序栈 include<stdio.h> define MAXSIZE 100 typedef struct{ int data[MAXSIZE]; 缺乏、安全感/ 2022年06月16日 03:21/ 0 赞/ 161 阅读
相关 顺序栈 //seqstack.h include<string.h> include<malloc.h> include<limits.h> incl 傷城~/ 2022年06月03日 20:39/ 0 赞/ 158 阅读
相关 顺序栈 栈: 限定仅在表尾进行插入和删除操作的线性表。因此,对于栈来说,表尾有其特殊含义,称为栈顶,相应地,表头称为栈底。不含元素的空表称为空栈。 系统管理员/ 2022年04月22日 03:06/ 0 赞/ 186 阅读
相关 顺序栈 / @author huihut @E-mail:huihut@outlook.com @version 创建时间:2016年9月9日 蔚落/ 2021年12月18日 05:07/ 0 赞/ 255 阅读
还没有评论,来说两句吧...